Spring Java配置和属性占位符解析

时间:2014-02-21 17:54:55

标签: spring spring-3 spring-java-config spring-profiles

我试图在没有明确声明PropertySourcesPlaceholderConfigurer bean的情况下解决Spring如何解析属性占位符。查看通过注释通过java配置spring的现有项目的源代码。 。 。

在spring上下文中xml:

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

并在一个java文件中引导应用程序的其余部分&amp;构造

package com.myproject.config;

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

}

这一切都很光滑,但我不能为我的生活弄清楚是什么告诉Spring评估针对环境变量的$ {...}属性占位符语法。我一直无法在spring文档中找到答案,但我知道spring依赖于PropertySourcesPlaceholderConfigurer类来完成此任务。什么都没有告诉我何时/如何隐式调用这个类。是通过@Configuration注释,还是在Spring引导过程的另一部分?

我知道这不是最了解的事情,但我不喜欢把任何东西都写成“春天魔术”。对此的任何见解都会令人惊叹!

3 个答案:

答案 0 :(得分:0)

我会尝试这样做:

@PropertySource(“config /#{systemProperties ['app.env']} .properties”)

(来源:http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/expressions.html#expressions-beandef-xml-based) 如果有评估,请告诉我。

答案 1 :(得分:0)

Per Spring @Configuration documentation,你的RootConfig类必须从某个地方“引导”,下面是一些例子。

通过 AnnotationConfigApplicationContext

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

通过 Spring xml

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

您是否检查了引导RootConfig的源代码,以查看是否已声明PropertySourcesPlaceholderConfigurer?例如:

<context:property-placeholder/>

答案 2 :(得分: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;
    }

}