환경 설정 spring 은 Property Placeholder Configurer 확장 을 사용 하여 서로 다른 환경의 매개 변수 설정 을 만족 시 킵 니 다.
spring 은 Property Placeholder Configurer 확장 을 사용 하여 서로 다른 환경의 매개 변수 설정 을 만족 시 킵 니 다.
에서
Property Placeholder Configure 는 spring 에서 환경 변수 (데이터베이스 연결 관련 매개 변수, 파일 경로 등) 를 통일 적 으로 관리 한 다음 에 bean 에서 해당 하 는 변 수 를 지정 합 니 다.그러나 환경 을 개발 하고 환경 을 테스트 하 며 환경 을 생 성 하 는 이러한 매개 변수 설정 이 다 릅 니 다. 그러면 우 리 는 Property Placeholder Configurer 확장 을 어떻게 사용 하여 서로 다른 환경의 설정 수 요 를 만족 시 키 는 지, 서로 다른 환경 에서 코드 나 설정 을 수정 하지 않 아 도 됩 니 다.
1. Property Placeholder Configurer 를 확장 하면 properties 에서 production. mode 기본 설정 이나 서로 다른 환경의 설정 을 통 해 시스템 환경 변수의 이 값 을 무한 하 게 추출 하여 우리 개발 환경, 테스트 환경, 생산 환경의 선택 으로 할 수 있 습 니 다.
import java.io.IOException;
import java.util.Map.Entry;
import java.util.Properties;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
/**
*
*
*/
public class MutilPropertyPlaceholderConfigurer extends PropertyPlaceholderConfigurer implements InitializingBean {
private static final String PRODUCTION_MODE = "production.mode";
//
private Properties properties;
/**
* @return the mode
*/
public String getMode() {
return properties.getProperty(PRODUCTION_MODE);
}
@Override
protected Properties mergeProperties() throws IOException {
Properties mergeProperties = super.mergeProperties();
// , properties
this.properties = new Properties();
// , mode
String mode = System.getProperty(PRODUCTION_MODE);
if (StringUtils.isEmpty(mode)) {
String str = mergeProperties.getProperty(PRODUCTION_MODE);
mode = str != null ? str : "ONLINE";
}
properties.put(PRODUCTION_MODE, mode);
String[] modes = mode.split(",");
Set<Entry<Object, Object>> es = mergeProperties.entrySet();
for (Entry<Object, Object> entry : es) {
String key = (String) entry.getKey();
int idx = key.lastIndexOf('_');
String realKey = idx == -1 ? key : key.substring(0, idx);
if (!properties.containsKey(realKey)) {
Object value = null;
for (String md : modes) {
value = mergeProperties.get(realKey + "_" + md);
if (value != null) {
properties.put(realKey, value);
break;
}
}
if (value == null) {
value = mergeProperties.get(realKey);
if (value != null) {
properties.put(realKey, value);
} else {
throw new RuntimeException("impossible empty property for " + realKey);
}
}
}
}
return properties;
}
/**
*
*
* @param key
* @return
*/
public String getProperty(String key) {
return resolvePlaceholder(key, properties);
}
@Override
public void afterPropertiesSet() throws Exception {
// TODO Auto-generated method stub
}
}
매일 같은 이치
생활 의 어 쩔 수 없 는 것 은 때때로 자신 에서 비롯 되 지 않 고 다른 사람 이 무심코 쌓 은 것 은 일종 의 우연 한 잘못 이다.생활 은 원래 모순 적 인 것 이다. 낮 과 밤 사이 의 거리, 봄, 여름, 가을, 겨울 사이 의 윤회, 그래서 까다 로 운 사랑 이 생 겨 어 쩔 수 없 이 기 쁜 기다 림 을 더 했다.
properties : ONLINE , production.mode, ONLINE , _ONLINE 。
production.mode=ONLINE
#lucene index data dir
lucene.index.dir_DEV=e:\\logs\\lucene
lucene.index.dir_ONLINE=/home/admin/data
#velocity
file.resource.loader.cache_DEV=false
file.resource.loader.modificationCheckInterval_DEV=2
file.resource.loader.cache_ONLINE=true
file.resource.loader.modificationCheckInterval_ONLINE=-1
spring 설정:
<!-- velocity -->
<import resource="classpath*:*.xml" />
<bean id="velocityConfigurer"
class="org.springframework.web.servlet.view.velocity.VelocityConfigurer">
<property name="resourceLoaderPath">
<value>WEB-INF/velocity/</value>
</property>
<property name="velocityProperties">
<props>
<prop key="directive.foreach.counter.name">velocityCount</prop>
<prop key="directive.foreach.counter.initial.value">1</prop>
<prop key="input.encoding">GBK</prop>
<prop key="output.encoding">GBK</prop>
<prop key="file.resource.loader.cache">${file.resource.loader.cache}</prop>
<prop key="file.resource.loader.modificationCheckInterval">${file.resource.loader.modificationCheckInterval}</prop>
<prop key="velocimacro.library.autoreload">false</prop>
<prop key="velocimacro.library">macro.vm</prop>
</props>
</property>
</bean>
이러한 매개 변 수 는 데이터베이스 연결 문자열, 파일 경로 등 을 포함 하여 모두 이렇게 배치 할 수 있 습 니 다. velocity 는 테스트 환경 에서 cache 가 필요 하지 않 고 수정 하면 효력 이 발생 하지만 온라인 환경 에 cache 를 더 하면 성능 이 향상 되 기 때문에 ONLINE 의 설정 을 기본 으로 사용 하지만 테스트 환경의 VM 매개 변수 에 - Dproduction. mode = DEV 를 더 하면 개발 환경 에서 을 사용 합 니 다.DEV 접미사 설정 은 온라인 코드 가 되면 변경 할 필요 가 없습니다.매우 편리 하 다.
가장 좋 은 것 은 프레임 위의 placeholder 의 사용자 정의 설정 bean 입 니 다.
<bean id="placeholder"
class="org.springweb.core.MutilPropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
<value>classpath*:*-placeholder.properties</value>
</list>
</property>
</bean>
글 이 끝나 면 프로그래머 의 농담 어록 을 공유 하 겠 습 니 다. 아 닙 니 다. Intel 은 높 은 이윤 을 유지 하고 경쟁 국면 을 유지 할 것 입 니 다. 외국 의 경쟁 은 상대방 을 죽 이 는 것 이 아 닙 니 다.보 세 요. 일본 에는 니 콘, 가 능, 소니 가 있 습 니 다. 모두 카 메 라 를 만 들 고 모두 가 윤택 하 게 지내 고 있 습 니 다.한 무더기 의 공장 을 보지 마라. 사실 진정 으로 통제 하 는 것 은 뒤에 있 는 몇 개의 재단 이다. 어떤 경쟁 상 대 는 뒤에 있 는 것 이 사실은 한 가족 이다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.