스프링 구성 파일을 사용하여 시스템 속성 설정
구성:
Spring 2.5, Junit 4, Log4j
log4j 파일 위치가 시스템 속성에서 지정되었습니다.
${log.location}
런타임에 시스템 속성이 -D java 옵션으로 설정됩니다.잘 있다.
문제 / 필요한 사항:
장치 테스트 시간에 시스템 속성이 설정되지 않았으며 파일 위치가 확인되지 않았습니다.
앱에서 Spring을 사용하여 시스템 속성을 설정하도록 Spring을 구성하려고 합니다.
추가 정보:
요구 사항은 구성 전용입니다.새 Java 코드 또는 항목을 IDE에 도입할 수 없습니다.Spring의 속성 구성 구현 중 하나가 이 문제를 해결할 수 있는 것이 이상적입니다. 올바른 조합을 찾을 수 없었습니다.
이 아이디어는 비슷하지만 Java 코드를 추가해야 합니다.
스프링 시스템 특성빈 초기화 중
도움이 필요합니까?어떤 아이디어든 감사합니다.
이를 위한 방법에 대한 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>
두 가지 방법을 조합하여 이를 달성할 수 있습니다.공장 콩 호출
System.getProperties에 액세스하는 내부 빈과 내부 빈에서 획득한 속성에 대해 putAll을 호출하는 외부 빈을 만듭니다.
<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>
(물론 한 개의 빈과 대상 시스템만 사용할 수 있습니다.속성()을 설정하지만 기존 속성을 대체하는 것은 좋지 않습니다.
어쨌든, 제 작은 테스트 방법은 다음과 같습니다.
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 Batch에 시스템 속성이 있음시스템 속성을 조금 더 간결하게 설정하는 데 사용할 수 있는 이니셜라이저 클래스. 예를 들어 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" 특성을 추가해야 합니다.
좀 더 간결한 접근법은 다음과 같습니다.
<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
'programing' 카테고리의 다른 글
| tsql에서 소수점 다음에 두 자리를 얻는 방법은 무엇입니까? (0) | 2023.08.23 |
|---|---|
| 음수를 양수로 변환하는 방법은 무엇입니까? (0) | 2023.08.23 |
| 기본적으로 일반 텍스트로 작은 모양의 붙여넣기를 만드는 방법 (0) | 2023.08.23 |
| Excel의 기본 ' 구분 기호' 변경 (0) | 2023.08.23 |
| 브라우저 세로 및 가로 스크롤 막대 사용 안 함 (0) | 2023.08.23 |