환경 설정 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 은 높 은 이윤 을 유지 하고 경쟁 국면 을 유지 할 것 입 니 다. 외국 의 경쟁 은 상대방 을 죽 이 는 것 이 아 닙 니 다.보 세 요. 일본 에는 니 콘, 가 능, 소니 가 있 습 니 다. 모두 카 메 라 를 만 들 고 모두 가 윤택 하 게 지내 고 있 습 니 다.한 무더기 의 공장 을 보지 마라. 사실 진정 으로 통제 하 는 것 은 뒤에 있 는 몇 개의 재단 이다. 어떤 경쟁 상 대 는 뒤에 있 는 것 이 사실은 한 가족 이다.

좋은 웹페이지 즐겨찾기