Home [Spring] 1.13.3. Using @PropertySource
Post
Cancel

[Spring] 1.13.3. Using @PropertySource

1.13.3. Using @PropertySource

The @PropertySource annotation provides a convenient and declarative mechanism for adding a PropertySource to Spring’s Environment.

  • @PropertySource 주석은 스프링의 EnvironmentPropertySource를 추가하기 위한 편리하고 선언적인 메커니즘을 제공한다.

Given a file called app.properties that contains the key-value pair testbean.name=myTestBean, the following @Configuration class uses @PropertySource in such a way that a call to testBean.getName() returns myTestBean:

  • app.properties라는 파일에 키 값 쌍 testbean.name=myTestBean,이 포함된 경우 다음 @Configuration 클래스는 @PropertySource를 사용하여 testBean.getName()을 호출하면 myTestBean을 반환한다.
1
2
3
4
5
6
7
8
9
10
11
12
@Configuration
@PropertySource("classpath:/com/myco/app.properties")
class AppConfig {

    @Autowired
    private lateinit var env: Environment

    @Bean
    fun testBean() = TestBean().apply {
        name = env.getProperty("testbean.name")!!
    }
}

Any ${…} placeholders present in a @PropertySource resource location are resolved against the set of property sources already registered against the environment, as the following example shows:

  • @PropertySource 리소스 위치에 존재하는 ${…} placeholders는 다음 예에서 볼 수 있듯이 환경에 대해 이미 등록된 property sources 집합에 대해 해결된다(resolved).
1
2
3
4
5
6
7
8
9
10
11
12
@Configuration
@PropertySource("classpath:/com/\${my.placeholder:default/path}/app.properties")
class AppConfig {

    @Autowired
    private lateinit var env: Environment

    @Bean
    fun testBean() = TestBean().apply {
        name = env.getProperty("testbean.name")!!
    }
}

Assuming that my.placeholder is present in one of the property sources already registered (for example, system properties or environment variables), the placeholder is resolved to the corresponding value. If not, then default/path is used as a default. If no default is specified and a property cannot be resolved, an IllegalArgumentException is thrown.

  • my.placeholder가 이미 등록된 속성 소스 중 하나(예: 시스템 속성 또는 환경 변수)에 존재한다고 가정하면 placeholder는 해당 값으로 결정된다.
  • 그렇지 않으면 default/path가 기본값으로 사용된다.
  • 디폴트가 지정되어 있지 않고 속성을 확인할 수 없는 경우, IllegalArgumentException처리된다.

The @PropertySource annotation is repeatable, according to Java 8 conventions. However, all such @PropertySource annotations need to be declared at the same level, either directly on the configuration class or as meta-annotations within the same custom annotation. Mixing direct annotations and meta-annotations is not recommended, since direct annotations effectively override meta-annotations.

  • @PropertySource 주석은 Java 8 규약에 따라 반복할 수 있다.
  • 그러나 이러한 모든 @PropertySource 주석은 구성 클래스에서 직접 또는 동일한 custom annotation 내의 meta-annotations으로 동일한 수준에서 선언되어야 한다.
  • direct annotations이 meta-annotations보다 효과적으로 우선하므로, direct annotations과 meta-annotations을 혼합하는 것은 권장되지 않는다.

References

This post is licensed under CC BY 4.0 by the author.

[Spring] 1.13.2. PropertySource Abstraction

[Spring] 1.13.4. Placeholder Resolution in Statements