[SPRING] 프로퍼티 파일의 경로를 얻고이를 런타임에 Bean에 전달하는 방법
SPRING프로퍼티 파일의 경로를 얻고이를 런타임에 Bean에 전달하는 방법
나는 봄에 의해 만들어진 콩을 가지고있다. 실제 클래스는 Spring과 다른 JAR에있다. 이 bean은 생성자 인수로서 경로를 전달받습니다. 그러나 파일 핸들을 검색하는 데 문제가 있습니다. 파일은 WEB-INF / classes /에 있습니다. WEB-INF를 기반으로 상대 경로 지정을 시도했지만 분명히 작동하지 않았습니다.
XML :
<bean id="configurationManager" class="package.ConfigurationManager"
scope="singleton">
<property name="configurationMapping">
<bean class="package.PropertiesFileConfigurationMapper">
<constructor-arg type="java.lang.String">
<value>/path/to/file</value>
</constructor-arg>
</bean>
</property>
</bean>
콩:
public class ConfigurationMapper {
public ConfigurationMapper(String resource) {
_map = new HashMap<String, String>();
String property = null;
BufferedReader reader = null;
try {
FileReader file = new FileReader(resourcePath);
reader = new BufferedReader(file);
while ((property = reader.readLine()) != null) {
if (property.matches("(.+)=(.+)")) {
String[] temp = property.split("(.+)=(.+)");
_map.put(temp[0], temp[1]);
}
}
} catch (Exception ex){
ex.printStackTrace();
} finally {
if (reader != null)
reader.close();
}
}
//other methods to manipulate settings
}
rm.properties 파일에 대한 적절한 경로를 얻고이를 런타임에 Bean에 전달하는 방법은 무엇입니까?
편집 : 생성자 코드를 추가했습니다.
편집 : 나는 그것을 얻었다. 생성자 인수를 더 이상 경로를 변경하지 않았습니다. 이제는 Resource가 필요하므로 Spring은 내가 원했던 리소스를 발견했습니다.
해결법
-
==============================
1.java.io.File 및 FileReader는 실제 파일에서만 작동합니다. JAR 파일 내에 압축 된 자원 자체는 파일이 아닙니다.
java.io.File 및 FileReader는 실제 파일에서만 작동합니다. JAR 파일 내에 압축 된 자원 자체는 파일이 아닙니다.
그것을로드하는 가장 쉬운 방법은 classpath 리소스입니다.
이것을 대체하십시오 :
FileReader file = new FileReader(resourcePath); reader = new BufferedReader(file);
이런 식으로 :
InputStream inputStream = getClass().getResourceAsStream(); reader = new BufferedReader(new InputStreamReader(inputStream));
더 나은 방법은 생성자 파라미터를 org.springframework.core.io.Resource로 선언하여 Spring의 Resource 추상화를 사용하는 것이다.
public ConfigurationMapper(Resource resource) { ... InputStream inputStream = resource.getInputStream(); reader = new BufferedReader(new InputStreamReader(inputStream));
그런 다음 경로를 제공 할 때 :
<constructor-arg value="classpath:/path/to/file"/>
Spring은 클래스 경로를 사용하여 그 경로에 대한 ClasspathResource를 자동으로 생성하여 생성자에 전달합니다.
-
==============================
2.Spring은 복잡한 리소스 선언을 가지고있다. 파일, 클래스 패스를 선언하거나 자신의 아이디어로 확장 할 수 있습니다. 모든 것은 리소스 URI를 기반으로합니다. 파일이 jar 파일에 있으므로 classpath를 사용하여로드 할 수 있습니다.
Spring은 복잡한 리소스 선언을 가지고있다. 파일, 클래스 패스를 선언하거나 자신의 아이디어로 확장 할 수 있습니다. 모든 것은 리소스 URI를 기반으로합니다. 파일이 jar 파일에 있으므로 classpath를 사용하여로드 할 수 있습니다.
<bean class="package.PropertiesFileConfigurationMapper"> <constructor-arg> <value>classpath:/path/to/file/in/jar</value> </constructor-arg> </bean>
이제 생성자를 수정하여 java.io.InputStream을 가져 오십시오.
public ConfigurationMapper(InputStream resource) { BufferedReader reader = new BufferedReader( new InputStreamReader( resource ) ); .... }
from https://stackoverflow.com/questions/7246369/how-to-get-the-path-to-a-properties-file-and-pass-it-to-a-bean-at-runtime by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Apache Camel 및 웹 서비스 (0) | 2019.05.18 |
---|---|
[SPRING] @AspectJ Spring 3.1을 기반으로 한 AOP (0) | 2019.05.18 |
[SPRING] XML에서 속성 주입이 실패합니다 (spring-ws config). (0) | 2019.05.18 |
[SPRING] 누구든지 정확하게 알고 있습니까? javax.jms.InvalidDestinationException : 대상을 만들 수 없다는 것을 의미합니까? (0) | 2019.05.18 |
[SPRING] 테스트에서 여러 개의 스프링 부팅 응용 프로그램 인스턴스화 (0) | 2019.05.18 |