[SPRING] 스프링 설정 파일로 시스템 속성 설정
SPRING스프링 설정 파일로 시스템 속성 설정
구성 : Spring 2.5, Junit 4, Log4j log4j 파일 위치는 시스템 등록 정보에서 지정됩니다.
${log.location}
런타임시 시스템 등록 정보는 -D java 옵션으로 설정됩니다. 모든 것이 잘됩니다.
문제 / 필요한 것 : 단위 테스트 시간에는 시스템 속성이 설정되지 않고 파일 위치가 확인되지 않습니다. App은 Spring을 사용하며 단순히 시스템 속성을 설정하기 위해 Spring을 구성하려고합니다.
더 많은 정보: 요구 사항은 구성 전용입니다. 새 Java 코드 또는 항목을 IDE에 도입 할 수 없습니다. 이상적으로, Spring의 프로퍼티 설정 구현 중 하나가 이것을 처리 할 수있다. 나는 적절한 조합을 찾을 수 없었다.
이 개념은 비슷하지만 Java 코드를 추가해야합니다. Spring SystemPropertyInitializingBean
밖에 도움이 필요 하신가요? 어떤 아이디어라도 감사합니다.
해결법
-
==============================
1.당신은 두 개의 MethodInvokingFactoryBean의 조합으로이를 달성 할 수 있습니다.
당신은 두 개의 MethodInvokingFactoryBean의 조합으로이를 달성 할 수 있습니다.
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>
물론 하나의 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\
-
==============================
2.댓글에서 Spring 3 예제를위한 요청이있었습니다.
댓글에서 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>
-
==============================
3.Spring Batch는 SystemPropertyInitializer 클래스를 가지고 있습니다.이 클래스는 시스템 속성을 약간 더 간결하게 설정하는 데 사용할 수 있습니다. JBoss 로깅을 강제로 slf4j (Spring JPA 사용) :
Spring Batch는 SystemPropertyInitializer 클래스를 가지고 있습니다.이 클래스는 시스템 속성을 약간 더 간결하게 설정하는 데 사용할 수 있습니다. JBoss 로깅을 강제로 slf4j (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"
"depends-on"속성을 추가하여 시스템 속성을 먼저 설정하도록하십시오.
-
==============================
4.좀 더 간결한 방법을 시도해보십시오.
좀 더 간결한 방법을 시도해보십시오.
<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'}}"/>
from https://stackoverflow.com/questions/3339736/set-system-property-with-spring-configuration-file by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring HandlerInterceptor 대 서블릿 필터 (0) | 2018.12.13 |
---|---|
[SPRING] Spring MVC에서, @ResponseBody를 사용할 때 어떻게 MIME 타입 헤더를 설정할 수 있습니까? (0) | 2018.12.13 |
[SPRING] 단위 테스트 중 Spring @Value 채우기 (0) | 2018.12.13 |
[SPRING] Jackson과 함께 열거 형 직렬화 (0) | 2018.12.13 |
[SPRING] 저장 프로 시저를 호출하기위한 Spring JDBC 템플릿 (0) | 2018.12.13 |