[SPRING] 스프링을 사용하여 동적으로 특성 파일로드
SPRING스프링을 사용하여 동적으로 특성 파일로드
나는 PropertyUtils 클래스 (인터넷에서)를 작성했다.이 클래스는 속성을로드 할 것이다.
<bean id="propertiesUtil" class="com.myApp.PropertiesUtil" >
<property name="locations">
<list>
<value>classpath:myApp/myApp.properties</value>
</list>
</property>
</bean>
PropertiesUtil 클래스는 아래와 같습니다.
public class PropertiesUtil extends PropertyPlaceholderConfigurer {
private static Map<String, String> properties = new HashMap<String, String>();
@Override
protected void loadProperties(final Properties props) throws IOException {
super.loadProperties(props);
for (final Object key : props.keySet()) {
properties.put((String) key, props.getProperty((String) key));
}
}
public String getProperty(final String name) {
return properties.get(name);
}
}
나중에 PropertiesUtil.getProperty () 메서드를 호출하여 속성을 가져올 수 있습니다.
하지만 이제 약간 수정하여 myApp.properties가 사용자에 의해 수정되거나 변경된 경우 다시로드해야합니다.
아마 FileWatcher 클래스가 필요합니다.
public abstract class FileWatcher extends TimerTask {
private long timeStamp;
private File file;
public FileWatcher(File file) {
this.file = file;
this.timeStamp = file.lastModified();
}
@Override
public final void run() {
long timeStampNew = this.file.lastModified();
if (this.timeStamp != timeStampNew) {
this.timeStamp = timeStampNew;
onChange(this.file);
}
}
protected abstract void onChange(File newFile);
}
하지만 내 의심은
해결법
-
==============================
1.다음과 같이 Spring의 ReloadableResourceBundleMessageSource 클래스를 사용할 수 있습니다.
다음과 같이 Spring의 ReloadableResourceBundleMessageSource 클래스를 사용할 수 있습니다.
<?xml version="1.0" encoding="UTF-8" ?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"> <bean id="myProperties" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> <!-- check property file(s) every 1 second --> <property name="cacheSeconds" value="1"/> <property name="basenames"> <list> <value>myApp/myApp</value> </list> </property> </bean> </beans>
그런 다음 MessageSource.getMessage () 메서드를 호출하여 속성 값을 가져올 수 있습니다. 다음은 그 예입니다.
package com.example; import org.springframework.context.ApplicationContext; import org.springframework.context.MessageSource; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MyApp { public static void main(String[] args) throws InterruptedException { ApplicationContext ctx = new ClassPathXmlApplicationContext("myApp/MyApp.xml"); MessageSource myProperties = (MessageSource) ctx.getBean("myProperties"); while (true) { System.out.println(myProperties.getMessage("myApp.propertyOne", null, null)); Thread.sleep(1000); } } }
'myProperties'bean의 이름을 'messageSource'로 변경하면 ApplicationContext.getMessage (String code, Object [] args, Locale locale)를 직접 호출 할 수 있습니다.
웹 응용 프로그램의 경우 속성 파일을 웹 응용 프로그램의 클래스 경로 외부에 배치하십시오 (웹 서버가 캐시 할 수 있기 때문에). 예를 들어, WEB-INF / conf / myApp.properties
-
==============================
2.다음은 당신이 찾고있는 것을 지원합니다 :
다음은 당신이 찾고있는 것을 지원합니다 :
https://commons.apache.org/proper/commons-configuration/userguide/howto_properties.html
PropertiesConfiguration config = new PropertiesConfiguration("usergui.properties"); config.setReloadingStrategy(new FileChangedReloadingStrategy());
이것은 트릭을해야합니다. 나는 그것을 직접 사용하지 않았지만 꽤 직설적 인 것처럼 보인다.
-
==============================
3.다음과 같이하는 것이 더 간단한 방법 일 수 있습니다.
다음과 같이하는 것이 더 간단한 방법 일 수 있습니다.
<util:properties location="classpath:config.properties" id="configProperties" /> <context:property-placeholder properties-ref="configProperties" />
이렇게하면 bean을 "configProperties"라는 이름으로 주입 / 액세스하여 모든 bean에서 등록 정보에 액세스 할 수 있습니다. 런타임에 configProperties를 수정할 수 없으므로 이것이 필요한지 확실하지 않습니다. 그러나 이것은 깨끗한 방법이며 추가 클래스를 작성할 필요가 없습니다.
from https://stackoverflow.com/questions/14117117/dynamically-loading-properties-file-using-spring by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 어떻게 봄 통합에서 병렬 및 동 기적으로 처리 하는가? (0) | 2019.01.21 |
---|---|
[SPRING] Tomcat에 배포하려고 할 때 발생 원인 : java.lang.NoSuchFieldError : NULL (0) | 2019.01.21 |
[SPRING] 탈 직렬화 중에 빈 객체를 무시하도록 Jackson에게 알려주는 방법? (0) | 2019.01.21 |
[SPRING] DispatcherServlet에 따라 ContextLoaderListener 사용 (0) | 2019.01.21 |
[SPRING] Spring webSecurity.ignoring ()은 사용자 정의 필터를 무시하지 않습니다. (0) | 2019.01.21 |