우리는 사용하는 PropertyPlaceholderConfigurer와 (우리의 봄 구성에서 사용하는 자바의 특성을 여기에 세부 사항 )
예 :
<foo name="port">
<value>${my.server.port}</value>
</foo>
추가 속성을 추가하고 싶지만 기존 인스턴스가 모두 기본값을 사용할 수있는 분산 시스템이 있습니다. 재정의 속성 값이 정의되지 않은 경우 Spring 구성에 기본값을 표시하여 모든 속성 파일을 업데이트하지 않는 방법이 있습니까?
답변
여기에 설명 된 PropertyOverrideConfigurer를 찾고 있습니까?
또 다른 빈 팩토리 포스트 프로세서 인 PropertyOverrideConfigurer는 PropertyPlaceholderConfigurer와 유사하지만 후자와는 대조적으로 원래 정의에는 기본값이 있거나 빈 속성에 대한 값이 전혀 없을 수 있습니다. 대체 특성 파일에 특정 Bean 특성에 대한 항목이없는 경우 기본 컨텍스트 정의가 사용됩니다.
답변
Spring 3는 ${my.server.port:defaultValue}
구문을 지원 합니다.
답변
조금 더 잘 알려진 기능이 있습니다. 하드 코딩 된 값 대신 구성 가능한 기본값을 사용할 수 있습니다. 예는 다음과 같습니다.
config.properties :
timeout.default=30
timeout.myBean=60
context.xml :
<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location">
<value>config.properties</value>
</property>
</bean>
<bean id="myBean" class="Test">
<property name="timeout" value="${timeout.myBean:${timeout.default}}" />
</bean>
나중에 쉽게 재정의 할 수있는 동안 기본값을 사용하려면 config.properties에서 다음을 수행하십시오.
timeout.myBean = ${timeout.default}
답변
<foo name="port">
<value>${my.server.port:8088}</value>
</foo>
8088을 기본 포트로 사용하려면 작동해야합니다.
참조 :
http://blog.callistaenterprise.se/2011/11/17/configure-your-spring-web-application/
답변
기본값은 다음과 :
같이 속성 키 뒤에 올 수 있습니다.
<property name="port" value="${my.server.port:8080}" />
또는 자바 코드에서 :
@Value("${my.server.port:8080}")
private String myServerPort;
보다:
-
valueSeparator
(부터AbstractPropertyResolver
) -
및
VALUE_SEPARATOR
(부터SystemPropertyUtils
)
BTW, Elvis 연산자 는 Spring Expression Language (SpEL) 내에서만 사용할 수 있습니다.
예 : https://stackoverflow.com/a/37706167/537554
답변
http://thiamteck.blogspot.com/2008/04/spring-propertyplaceholderconfigurer.html 은 빈 자체에 정의 된 “로컬 속성”이 파일에서 읽은 값으로 재정의되는 기본값으로 간주 될 것이라고 지적합니다.
<bean id="propertyConfigurer"class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="location"><value>my_config.properties</value></property>
<property name="properties">
<props>
<prop key="entry.1">123</prop>
</props>
</property>
</bean>
답변
또한 나를 위해 일하는 또 다른 솔루션을 찾습니다. 레거시 스프링 프로젝트에서는 사용자에게이 자체 구성을 사용할 수있는 가능성을 제공하기 위해이 방법을 사용합니다.
<bean id="appUserProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="ignoreResourceNotFound" value="false"/>
<property name="locations">
<list>
<value>file:./conf/user.properties</value>
</list>
</property>
</bean>
이 속성에 액세스하려면 코드에서 다음과 같이 작성해야합니다.
@Value("#{appUserProperties.userProperty}")
private String userProperty
새 속성을 추가해야하지만 지금은 프로덕션 사용자 구성에 추가하고 싶지 않은 상황이 발생하면 모든 테스트 컨텍스트를 패치해야 할 때 매우 빠르게 지옥이됩니다. 그렇지 않으면 애플리케이션이 실패합니다. 시작.
이 문제를 처리하기 위해 다음 구문을 사용하여 기본값을 추가 할 수 있습니다.
@Value("#{appUserProperties.get('userProperty')?:'default value'}")
private String userProperty
저에게는 진정한 발견이었습니다.