我试图在没有明确声明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引导过程的另一部分?
我知道这不是最了解的事情,但我不喜欢把任何东西都写成“春天魔术”。对此的任何见解都会令人惊叹!
答案 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;
}
}