2014-02-21 5 views
0

명시 적으로 PropertySourcesPlaceholderConfigurer bean을 선언하지 않을 때 Spring이 속성 자리 표시자를 해결하는 방법에 대해 머리를 감싸려고합니다. 어노테이션을 통해 자바를 통해 스프링을 구성하는 기존 프로젝트의 소스를 살펴 봅니다. . . 스프링 컨텍스트 XML의 Spring Java 구성 및 속성 자리 표시 자 해결

:
<context:component-scan base-package="com.myproject.config" /> 

및 & 구성

package com.myproject.config; 

@Configuration 
@ComponentScan(basePackages = {"com.myproject.app"}) 
@PropertySource("config/${app.env}.properties") 
public class RootConfig { 

} 

그것은 모두 아주 매끄러운의 응용 프로그램의 나머지 부분을 부트 스트랩 자바 파일에

,하지만 난 수 없습니다의 삶에 대한 Spring이 환경 변수에 대한 $ {...} 속성 자리 표시 자의 구문을 평가하도록 알려줍니다. 스프링 문서에서 대답을 찾을 수 없었습니다. 스프링은 PropertySourcesPlaceholderConfigurer 클래스에 의존합니다. 이 클래스가 암시 적으로 호출되는시기/방법에 대한 단서는 없습니다. @Configuration 어노테이션을 통해서입니까, 아니면 스프링 부트 스트랩 프로세스의 다른 부분입니까?

나는 이것이 가장 적절한 것이 아니라는 것을 알고 있지만 "봄맞이 마법"으로 아무것도 쓰지 않는 것을 좋아합니다. 이것에 대한 통찰력은 놀랄 것입니다!

답변

0

봄마다 @Configuration documentation, RootConfig 클래스는 어딘가에서 "부트 스트랩"되어야하며, 아래에는 몇 가지 예가 나와 있습니다.

<beans> 
    <context:annotation-config/> 
    <bean class="...RootConfig"/> 
</beans> 

당신이 PropertySourcesPlaceholderConfigurer가 선언 된 경우 부트 스트랩 RootConfig보고의 소스를 확인 했

AnnotationConfigApplicationContext context = 
     new AnnotationConfigApplicationContext(); 
ccontext.register(RootConfig.class); 

봄 XML 를 통해 AnnotationConfigApplicationContext 통해?

<context:property-placeholder/> 
0
@Configuration 
@PropertySource("classpath:property.property") 
public class ConfigClass { 

    @Autowired Environment env; 

    @Bean 
    public Entity getEntity(){ 
     Entity entity = new Entity(); 
     entity.setUsername(env.getProperty("jdbc.username")); 
     entity.setDriverClassName(env.getProperty("jdbc.driverClassName")); 
     entity.setPassword(env.getProperty("jdbc.password")); 
     entity.setUrl(env.getProperty("jdbc.url")); 
     return entity; 
    } 

} 
: 예를 들어,