목차

PropertySource

프라퍼티 추가

코딩을 통한 임의의 프라퍼티 소스 추가

일반 Java 애플리케이션

ConfigurableApplicationContext ctx = new GenericApplicationContext();
MutablePropertySources sources = ctx.getEnvironment().getPropertySources();
sources.addFirst(new MyPropertySource());

웹 애플리케이션

ApplicationContextInitializer를 Java 코드 기반 ApplicationContext에서 사용하기

@Configuration 클래스에서 XML 프라퍼티를 프라퍼티 소스로 등록하기 예제

3.2 최신 버전에서는 이 기법을 사용할 필요가 없다. ApplicationContextInitializer를 사용하자. 현재(3.1.2) @PropertySource를 통해서는 XML 프라퍼티를 등록할 수 없는 상태인데, @Configuration Java 클래스에서 직접 등록할 수 있다. ConfigurableApplicationContext를 주입 받은 것에 주의하라. ApplicationContext로 주입 받으면 안 된다. 프라퍼티 소스의 이름도 겹치면 안 된다.

@Configuration
public class SpringConfig {
 
  @Autowired
  private org.springframework.context.ConfigurableApplicationContext applicationContext;
 
  @Autowired
  private org.springframework.core.io.ResourceLoader resourceLoader;
 
  @PostConstruct
  public void addXmlProperties() throws Exception {
    addXmlProperties("classpath:my-properties.xml");
    addXmlProperties("classpath:my-properties2.xml");
  }
 
  private void addXmlProperties(String location) throws IOException,
      InvalidPropertiesFormatException {
    Resource resource = resourceLoader.getResource(location);
 
    Properties properties = new Properties();
    properties.loadFromXML(resource.getInputStream());
    applicationContext
        .getEnvironment()
        .getPropertySources()
        .addLast(
            new PropertiesPropertySource(
                getNameForResource(resource), properties));
  }
 
  // from ResourcePropertySource
  private static String getNameForResource(Resource resource) {
    String name = resource.getDescription();
    if (!StringUtils.hasText(name)) {
      name = resource.getClass().getSimpleName() + "@"
          + System.identityHashCode(resource);
    }
    return name;
  }
 
  @Bean
  public static PropertySourcesPlaceholderConfigurer placeholderConfigurer() {
    return new PropertySourcesPlaceholderConfigurer();
  }
}

PlaceHolder로 사용하기

PropertySource에 등록된 프라퍼티들을 @Value(“${property.name}”) 형태로 사용하려면 PropertySourcesPlaceholderConfigurer 등록이 필요하다.

ResourceLoader

@Value

@Value로 Date 객체 주입하기