使用Spring在xml上下文中,我们可以像这样简单地加载属性:
<context:property-placeholder location:"classpath*:app.properties"/>
是否有机会在没有样板的情况下在@Configuration bean(〜来自java代码)中配置相同的属性?
谢谢!
答案 0 :(得分:9)
您可以像这样使用注释@PropertySource
@Configuration
@PropertySource(value="classpath*:app.properties")
public class AppConfig {
@Autowired
Environment env;
@Bean
public TestBean testBean() {
TestBean testBean = new TestBean();
testBean.setName(env.getProperty("testbean.name"));
return testBean;
}
}
编辑:如果您使用的是Spring引导,则可以使用@ConfigurationProperties
注释将属性文件直接连接到bean属性,如下所示:
test.properties
name=John Doe
age=12
PersonProperties.java
@Component
@PropertySource("classpath:test.properties")
@ConfigurationProperties
public class GlobalProperties {
private int age;
private String name;
//getters and setters
}
源: https://www.mkyong.com/spring-boot/spring-boot-configurationproperties-example/
答案 1 :(得分:6)
可以通过以下代码
完成手动配置public static PropertySourcesPlaceholderConfigurer loadProperties(){
PropertySourcesPlaceholderConfigurer propertySPC =
new PropertySourcesPlaceholderConfigurer();
Resource[] resources = new ClassPathResource[ ]
{ new ClassPathResource( "yourfilename.properties" ) };
propertySPC .setLocations( resources );
propertySPC .setIgnoreUnresolvablePlaceholders( true );
return propertySPC ;
}
资料来源:Property Placeholder
答案 2 :(得分:0)
一个简单的解决方案是你的bean也将包含一些init函数:
在春季配置中,您可以提及:
<bean id="TestBean" class="path to your class" init-method="init" singleton="false" lazy-init="true" >
init,在此方法中,您可以覆盖已设置的属性,也可以设置任何属性。