Spring 구성 파일로 시스템 속성 설정
구성 :
Spring 2.5, Junit 4, Log4j
log4j 파일 위치는 시스템 속성에서 지정됩니다.
${log.location}
런타임시 -D java 옵션으로 설정된 시스템 속성. 모든 것이 좋습니다.
문제 / 필요한 사항 :
단위 테스트시 시스템 속성이 설정되지 않았고 파일 위치가 해결되지 않았습니다.
앱은 Spring을 사용 하고 시스템 속성 을 설정 하기 위해 Spring을 구성하고 싶습니다 .
추가 정보 :
요구 사항은 구성 전용입니다. 새 Java 코드 또는 항목을 IDE에 도입 할 수 없습니다. 이상적으로는 Spring의 속성 구성 구현 중 하나가이를 처리 할 수 있습니다. 올바른 조합을 찾을 수 없었습니다.
이 아이디어는 비슷하지만 Java 코드를 추가해야합니다.
Spring SystemPropertyInitializingBean
도움이 필요하십니까? 어떤 아이디어라도 감사합니다.
두 개의 MethodInvokingFactoryBeans 의 조합으로이를 달성 할 수 있습니다.
System.getProperties에 액세스하는 내부 Bean과 내부 Bean이 획득 한 특성에 대해 putAll을 호출하는 외부 Bean을 작성하십시오.
<bean
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property
name="targetObject">
<!-- System.getProperties() -->
<bean
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetClass" value="java.lang.System" />
<property name="targetMethod" value="getProperties" />
</bean>
</property>
<property
name="targetMethod"
value="putAll" />
<property
name="arguments">
<!-- The new Properties -->
<util:properties>
<prop
key="my.key">myvalue</prop>
<prop
key="my.key2">myvalue2</prop>
<prop
key="my.key3">myvalue3</prop>
</util:properties>
</property>
</bean>
(물론 하나의 빈과 대상 System.setProperties () 만 사용할 수 있지만, 좋은 생각이 아닌 기존 속성을 대체 할 것입니다.
어쨌든, 여기 내 작은 테스트 방법이 있습니다.
public static void main(final String[] args) {
new ClassPathXmlApplicationContext("classpath:beans.xml");
System.out.println("my.key: "+System.getProperty("my.key"));
System.out.println("my.key2: "+System.getProperty("my.key2"));
System.out.println("my.key3: "+System.getProperty("my.key3"));
// to test that we're not overwriting existing properties
System.out.println("java.io.tmpdir: "+System.getProperty("java.io.tmpdir"));
}
다음은 출력입니다.
my.key: myvalue
my.key2: myvalue2
my.key3: myvalue3
java.io.tmpdir: C:\DOKUME~1\SEANFL~1\LOKALE~1\Temp\
이를 수행하는 방법에 대한 Spring 3 예제에 대한 의견에 요청이있었습니다.
<bean id="systemPrereqs"
class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject" value="#{@systemProperties}" />
<property name="targetMethod" value="putAll" />
<property name="arguments">
<!-- The new Properties -->
<util:properties>
<prop key="java.security.auth.login.config">/super/secret/jaas.conf</prop>
</util:properties>
</property>
</bean>
Spring Batch has a SystemPropertyInitializer class which can be used to set a system property slightly more concisely, e.g. to force JBoss logging to use slf4j (with Spring JPA):
<bean id="setupJBossLoggingProperty"
class="org.springframework.batch.support.SystemPropertyInitializer"
p:keyName="org.jboss.logging.provider" p:defaultValue="slf4j"/>
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
depends-on="setupJBossLoggingProperty"
Remember to add the "depends-on" attribute to force the system property to be set first.
For a more terse approach try:
<beans ... xmlns:p="http://www.springframework.org/schema/p" ...
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"
p:targetObject="#{@systemProperties}" p:targetMethod="setProperty"
p:arguments="#{{'org.jboss.logging.provider','slf4j'}}"/>
참고URL : https://stackoverflow.com/questions/3339736/set-system-property-with-spring-configuration-file
'program tip' 카테고리의 다른 글
PHP에서 현재 함수의 이름 검색 (0) | 2020.12.14 |
---|---|
const int = int const? (0) | 2020.12.14 |
확장 가능한 개체를 병합하는 방법은 무엇입니까? (0) | 2020.12.14 |
누군가가 최대 절전 모드에서 @MapsId를 설명해 주시겠습니까? (0) | 2020.12.13 |
디자인 패턴 : 예외 / 오류 처리 (0) | 2020.12.13 |