[SPRING] 스프링에서 동적으로 빈 참조를 설정하는 방법은?
SPRING스프링에서 동적으로 빈 참조를 설정하는 방법은?
<bean id="Mybean" class="Bean">
<property name="config" ref="dev"/>
</bean>
<bean id="dev" class="Dev">
<property name="x" ref="Dev1">
<property name="y" ref="Dev2">
<property name="z" ref="Dev3">
</bean>
<bean id="stag" class="Dev">
<property name="x" ref="Stag1">
<property name="y" ref="Stag2">
<property name="z" ref="Stag3">
</bean>
위의 시나리오에서 bean MyBean의 config 등록 정보는 환경에서 환경으로 변경됩니다. dev의 시간에 dev에 대한 구성 변경 참조. 그리고 스테이징에서 기준은 사슴으로 바뀝니다. 문제는 봄철 파일을 검사 할 때 발생합니다. 체크인하기 전에 config의 레퍼런스를 매번 분석해야합니다. dev의 값으로 config를 참조하면 많은 질문을 설명해야 할 수도 있습니다.
자동화 할 수있는 해결 방법이 있습니까? 참고 : Spring 버전은 2.0.1입니다.
해결법
-
==============================
1.Spring의 PropertyPlaceholderConfigurer를 사용하고 사용되지 않는 bean을 제거하십시오 :
Spring의 PropertyPlaceholderConfigurer를 사용하고 사용되지 않는 bean을 제거하십시오 :
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location"> <value>env.properties</value> </property> </bean> <bean id="Mybean" class="Bean"> <property name="config" ref="config"/> </bean> <bean id="config" class="Config"> <property name="x" ref="${x}"> <property name="y" ref="${y}"> <property name="z" ref="${z}"> </bean>
env.properties 파일에는 다음 등록 정보가 들어 있습니다.
x=Dev1 y=Dev2 z=Dev3
또는
x=Stag1 y=Stag2 z=Stag3
-
==============================
2.예 :
예 :
<beans> <bean id="configBean" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location"><value>env.properties</value></property> </bean> <bean id="Mybean" class="Bean"> <property name="config" ref="${env}"/> </bean> </beans>
env.properties 파일에 env = dev 키 - 값을 추가해야합니다.
-
==============================
3.Spring 2.1 (존재하지 않음)보다는 Spring 3.1을 의미한다고 가정하면 3.1에서 소개 된 새로운 "환경 프로파일"기능을 사용할 수 있습니다. 이렇게하면 각 환경에 대한 빈 세트를 정의한 다음 런타임에 "활성"세트를 선택할 수 있습니다.
Spring 2.1 (존재하지 않음)보다는 Spring 3.1을 의미한다고 가정하면 3.1에서 소개 된 새로운 "환경 프로파일"기능을 사용할 수 있습니다. 이렇게하면 각 환경에 대한 빈 세트를 정의한 다음 런타임에 "활성"세트를 선택할 수 있습니다.
예제는이 SpringSource 블로그 항목을 참조하십시오.
-
==============================
4.PropertyPlaceholderConfigurer를 사용하거나 @Profile을 사용하여이 작업을 수행 할 수 있습니다.
PropertyPlaceholderConfigurer를 사용하거나 @Profile을 사용하여이 작업을 수행 할 수 있습니다.
참조
-
==============================
5.PropertyPlaceholderConfigurer가 답이지만, 각 환경에 대한 속성 파일을 업데이트하지 않고도이 작업을 원한다고 생각합니다.
PropertyPlaceholderConfigurer가 답이지만, 각 환경에 대한 속성 파일을 업데이트하지 않고도이 작업을 원한다고 생각합니다.
내 제안은 다음과 같습니다.
그래서 당신이해야 할 일은 콩을 똑같은 방식으로 정의하는 것입니다. 예를 들어, dev와 stag .. 당신이 명확하게 다른 설정을 보여주기 때문에 훌륭한 접근법입니다 ... 당신이 또한 추가하면 도움이 될 것입니다. 일부 별칭은 사용하려는 설정을 명확하게 보여줍니다.
다음으로, 당신이 속한 모드를 정의하는 시스템 특성을 전달하십시오. 그리고 이상적으로는 시스템 특성을 사용하도록 PropertyPlaceholderConfigurer를 명시 적으로 설정하십시오.
그래서 .. 당신의 설정은 다음과 같이 보입니다.
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" systemPropertiesMode="2"/> <bean id="Mybean" class="Bean"> <property name="config" ref="${launch.mode}"/> </bean> <bean id="dev" name="dev_mode" class="Dev"> <property name="x" ref="Dev1"> <property name="y" ref="Dev2"> <property name="z" ref="Dev3"> </bean> <bean id="stag" name="staging_mode" class="Dev"> <property name="x" ref="Stag1"> <property name="y" ref="Stag2"> <property name="z" ref="Stag3"> </bean>
그러면 다음과 같은 방법으로 시작시 속성에 전달할 수 있습니다.
-D<property-name>=<value>
그래서이 경우에는
-Dlaunch.mode=dev_mode
또는
-Dlaunch.mode=staging_mode
그리고 구성 파일을 만질 필요가 없습니다.
systemPropertiesMode에 대한 추가 참고 사항으로 허용되는 값은 다음과 같습니다.
희망이 도움이 :)
참고 :이 권장 사항은 3.1 이후부터 @Profile을 사용하는 것이 좋기 때문에 Spring <3.1에만 적용 가능합니다.
-
==============================
6.Spring은 property placeholders라는 메커니즘을 제공한다. 이렇게하면 데이터베이스 / 등록 정보 파일에서 특정 속성을 설정할 수 있으며 시작시 봄이 채 웁니다.
Spring은 property placeholders라는 메커니즘을 제공한다. 이렇게하면 데이터베이스 / 등록 정보 파일에서 특정 속성을 설정할 수 있으며 시작시 봄이 채 웁니다.
이 클래스는 여기에 있습니다.
from https://stackoverflow.com/questions/9124982/how-to-set-dynamically-a-bean-reference-in-spring by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 로그인하지 않고 스프링 웹 소켓 @SendToUser? (0) | 2019.01.17 |
---|---|
[SPRING] 테스트 메소드 내에서 Spring 애플리케이션 컨텍스트를 다시로드하거나 새로 고칩니다. (0) | 2019.01.17 |
[SPRING] Spring - application 두 번 초기화 되었습니까? (0) | 2019.01.17 |
[SPRING] Spring Security Java Config가 로그 아웃 URL을 생성하지 않습니다. (0) | 2019.01.17 |
[SPRING] 스프링에 편안한 아약스 요청 매핑하기 (0) | 2019.01.17 |