[SPRING] @PropertySource를 사용한 Spring 속성 설정
SPRING@PropertySource를 사용한 Spring 속성 설정
아래 Spring 구성 클래스에서 @PropertySource를 통해 app.properties 파일을로드하고 속성 파일의 구성을 사용하여 두 가지 DBCP 데이터 소스를 구성합니다.
모든 것이 잘 작동하지만 데이터 소스를 생성하기 위해 주석을 사용하여 각 구성 속성에 대한 변수를 선언하는 것을 좋아하지 않습니다. 이런 환경 클래스를 autowire하려고했습니다.
@Autowired Environment env;
다만, env.getProperty ()가 null를 돌려주는 경우. 이 작업을 수행하는 더 좋은 방법이 있습니까?
@Configuration
@PropertySource("classpath:app.properties")
public class DAOConfig {
@Value( "${txn.dbhost}" ) private String txnDbHost;
@Value( "${txn.dbport}" ) private Integer txnDbPort;
@Value( "${txn.dbservice}" ) private String txnDbService;
@Value( "${txn.dbuser}" ) private String txnDbUser;
@Value( "${txn.dbpwd}" ) private String txnDbPwd;
@Value( "${rpt.dbhost}" ) private String rptDbHost;
@Value( "${rpt.dbport}" ) private Integer rptDbPort;
@Value( "${rpt.dbservice}" ) private String rptDbService;
@Value( "${rpt.dbuser}" ) private String rptDbUser;
@Value( "${rpt.dbpwd}" ) private String rptDbPwd;
@Bean(destroyMethod = "close")
public DataSource txnDataSource() {
return new DataSources.Builder()
.host(txnDbHost)
.port(txnDbPort)
.service(txnDbService)
.user(txnDbUser)
.pwd(txnDbPwd)
.build();
}
@Bean(destroyMethod = "close")
public DataSource rptDataSource() {
return new DataSources.Builder()
.host(rptDbHost)
.port(rptDbPort)
.service(rptDbService)
.user(rptDbUser)
.pwd(rptDbPwd)
.build();
}
}
편집 : 나는 Environment.getProperty ()에 대해 다시 작동하지 않습니다. 실제로 작동합니다. 나는 재산 이름을 잘못주고 있었다. Spring Boot를 사용하고 싶지 않은 사용자는 다음과 같이 Environment를 autowire 할 수 있습니다.
@Configuration
@PropertySource("classpath:app.properties")
public class DAOConfig {
@Autowired Environment env;
@Bean(destroyMethod = "close")
public DataSource txnDataSource() {
return new DataSources.Builder()
.host(env.getProperty("txn.dbhost"))
.port(env.getProperty("txn.dbport"))
.service(env.getProperty("txn.dbservice"))
.user(env.getProperty("txn.dbuser"))
.pwd(env.getProperty("txn.dbpwd"))
.build();
}
}
해결법
-
==============================
1.Spring Boot를 사용하고 있다면 (또는 사용하고자한다면) @ConfigurationProperties 주석을 사용할 수 있습니다.
Spring Boot를 사용하고 있다면 (또는 사용하고자한다면) @ConfigurationProperties 주석을 사용할 수 있습니다.
다음은 스프링 부트 소스 코드의 예제입니다.
@ConfigurationProperties(prefix = "spring.activemq") public class ActiveMQProperties { private String brokerUrl = "tcp://localhost:61616"; private boolean inMemory = true; private boolean pooled = false; private String user; private String password; // Will override brokerURL if inMemory is set to true public String getBrokerUrl() { if (this.inMemory) { return "vm://localhost"; } return this.brokerUrl; } public void setBrokerUrl(String brokerUrl) { this.brokerUrl = brokerUrl; } public boolean isInMemory() { return this.inMemory; } public void setInMemory(boolean inMemory) { this.inMemory = inMemory; } public boolean isPooled() { return this.pooled; } public void setPooled(boolean pooled) { this.pooled = pooled; } public String getUser() { return this.user; } public void setUser(String user) { this.user = user; } public String getPassword() { return this.password; } public void setPassword(String password) { this.password = password; } }
실제로 이것은 spring.activemq. * 속성을 해당 속성으로 매핑합니다.
이전 종류의 코드를 사용하면 각 필드에서 @Value를 사용해야합니다.
표시된 특정 DataSource 예제에서 Spring Boot는 버전 1.1.0.M1에서 DataSourceBuilder를 제공하며 @ConfigurationProperties를 기반으로 구현하려는 구성 유형을 대폭 단순화합니다. 여기에서 설명서를 참조하십시오.
귀하의 경우 코드는 다음과 같습니다.
@Bean @ConfigurationProperties(prefix="txn") public DataSource primaryDataSource() { return DataSourceBuilder.create().build(); } @Bean @ConfigurationProperties(prefix="rpt") public DataSource secondaryDataSource() { return DataSourceBuilder.create().build(); }
from https://stackoverflow.com/questions/23981670/spring-properties-configuration-using-propertysource by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] ClassPathResource가 클래스 경로를 가져 오지 않습니다. (0) | 2019.07.16 |
---|---|
[SPRING] Spring 구성 클래스에서 @Bean 메소드에 @Autowired가 필요하지 않은 이유는 무엇입니까? (0) | 2019.07.16 |
[SPRING] Spring Framework에서 setter가 어떻게 작동합니까? (0) | 2019.07.16 |
[SPRING] Spring 어노테이션에서 정적 변수 사용하기 (0) | 2019.07.16 |
[SPRING] ClassCastException : DispatcherServlet을 Servlet에 캐스트 할 수 없습니다. (0) | 2019.07.16 |