일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- STS
- between date
- git
- github
- 라즈베리파이
- template
- Spring Security
- oracle between
- intellij
- Linux
- Spring Boot
- oracle
- hikaricp
- springboot
- Spring
- datasource
- ubuntu
- ORACLE CLOUD
- bitbucket
- python 개발환경
- log4j profile
- 배열스트링
- hikari
- catalina log
- Gradle
- MySQL
- Java
- between 날짜
- log4j2
- mybatis
Archives
- Today
- Total
반응형
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- STS
- between date
- git
- github
- 라즈베리파이
- template
- Spring Security
- oracle between
- intellij
- Linux
- Spring Boot
- oracle
- hikaricp
- springboot
- Spring
- datasource
- ubuntu
- ORACLE CLOUD
- bitbucket
- python 개발환경
- log4j profile
- 배열스트링
- hikari
- catalina log
- Gradle
- MySQL
- Java
- between 날짜
- log4j2
- mybatis
Archives
- Today
- Total
파워노트
spring properties 에 대해서... 본문
반응형
* 대충 정리 하자면 spring 3.1 정도에서 좀 변화가 있었던거 같다.
# 일반적인 xml 설정.
Spring 3.1이전에는<context:property-placeholder>를 정의하면 PropertyPlaceholderConfigurer를 사용하였다. Environment를 이용해 해당값을 가져올수 있다.
물론 spring 3.1 이후에도 사용가능 하다.
<context:property-placeholder location="/WEB-INF/config/jdbc-${spring.profiles.active}.properties" file-encoding="UTF-8" />
# property의 사용
[ application.properties ]
app.message.hello="i am a boy"
[ class ]
@Value("${app.message.hello}")
String hello;
[ class 내에서의 사용 ]
log.info("hello : {}", hello);
# spring 3.1 이후 변화
spring 3.1 이후 부터는 PropertySourcesPlaceholderConfigurer를 내부에서 사용하고 있으며 ${...} 값을 찾지 못하면 Environment에서 Properties를 가져온다. 그러나 Environment 변수에는 직접적으로 setting할수는 없어 Environment 변수 setting이 필요한 경우에는 PropertySource를 통해 사용자정의 구현이 필요 하다.
# PropertySourcesPlaceholderConfigurer xml 설정.
<beans:bean id="propertyConfigurer" class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
<!-- 아래 properties 목록에서 없는 properties는 무시 -->
<beans:property name="ignoreResourceNotFound" value="true" />
<!-- 만약 설정 요소가 존재하지 않아도 서버를 멈추지 않고 정상적으로 작동될 수 있도록 해줍니다. -->
<beans:property name="ignoreUnresolvablePlaceholders" value="true" />
<beans:property name="locations">
<beans:list>
<beans:value>classpath:application.properties</beans:value>
<beans:value>classpath:application-${spring.profiles.active}.properties</beans:value>
<beans:value>classpath:test.properties</beans:value>
</beans:list>
</beans:property>
</beans:bean>
# property의 설정이나 사용은 동일 하다.
# Environment 환경변수 값에 property setting ( PropertySources )
Environment 환경변수에 직접 properties 값을 로딩할 수 있다.
@Configuration
@PropertySources({
@PropertySource("classpath:application.properties"),
@PropertySource(value = "classpath:/application-${spring.profiles.active}.properties", ignoreResourceNotFound = true)
})
public class AppConfig {
}
# property의 사용
[ application.properties ]
app.message.hello="i am a boy"
[ application-prod.properties ]
app.message.hello="how are you?"
[ class ]
@Autowired
Environment env;
@Value("${app.message.hello}")
String hello;
[ class 내에서의 사용 ]
environment 변수 및 Value를 통한 사용 모두 가능 하다 .
log.info("app.message.hello {}" , env.getProperty("app.message.hello") );
log.info("properties app.message.hello {}" , hello );
# 추가적으로 Apache PropertiesConfiguration
apache commons lib를 통한 프로퍼티변경을 톰캣 재기동없이 반영할 수 있다. 서버 운영시에 가장 많이 사용되지 않나 싶다.
[ pom.xml ] dependency 설정
<!-- commons-configuration PropertiesConfiguration 를 통한 property 관리 -->
<dependency>
<groupId>commons-configuration</groupId>
<artifactId>commons-configuration</artifactId>
<version>1.10</version>
</dependency>
[ servlet-context.xml ]
<bean id="propertyReloading" class="org.apache.commons.configuration.reloading.FileChangedReloadingStrategy" />
<bean id="runtimeProperties" class="org.apache.commons.configuration.PropertiesConfiguration">
<constructor-arg type="java.lang.String" value="${app.runtime.property.filepath}" />
<property name="reloadingStrategy" ref="propertyReloading" />
</bean>
${app.runtime.property.filepath} 는 properties 로 사용할 외부 경로를 넣어주면 된다.
[ class 내 사용을 위한 주입 ]
@Autowired
private PropertiesConfiguration runtimeProperties;
[ class 내에서의 사용 ]
model.addAttribute("app.title", runtimeProperties.getProperty("app.title"));
model.addAttribute("app.configYN", runtimeProperties.getProperty("app.configYN"));
반응형
'spring legacy' 카테고리의 다른 글
tomcat 성능 향상. maxKeepAliveRequests="1" (0) | 2022.03.11 |
---|---|
@Async @Scheduler ThreadPool 생성 및 사용. (0) | 2022.03.08 |
spring legacy project 에서 log4j2.xml 을 profile로 관리 할때 (0) | 2022.03.04 |
Comments