[Spring] @PropertySource and Environment 사용시 Property 값이 null 로 들어오는 경우

Spring에서 Property 값을 아래와 같이 가져올 수 있다.

@Configuration
@PropertySource("classpath:myProperties.properties")
public class MyConfiguration {

@Autowired
Environment environment;

public DataSource getDataSource(){

    dataSource.setDriverClassName(environment.get("jdbc.driverClassName"));

    return dataSource;
}

}


하지만, Autowiring이 늦게 발생하는 경우 environment 에는 값이 없는 상태로
MyConfiguration 의 getDataSource() 메서드가 먼저 실행된다.
일종의 트릭이지만, org.springframwork.context.EnvironmentAware 를 implement 하여
해결할 수 있다.

@Configuration
@PropertySource("classpath:myProperties.properties")
public class MyConfiguration implements EnvironmentAware {

 private Environment environment;

 @Override
 public void setEnvironment(final Environment environment) {
  this.environment = environment;
 }

 public void myMethod() {
  final String myPropertyValue = environment.getProperty("myProperty");
  // ...
  }
}

refs :

http://stackoverflow.com/questions/19454289/spring-boot-environment-autowired-throws-nullpointerexception



댓글

이 블로그의 인기 게시물

[JDBC] 쿼리 후에 ResultSet 에 데이터가 있는지 확인하는 방법

[Android] Android 로깅 시 isLoggable() 메서드 사용