【发布时间】:2013-03-01 14:00:16
【问题描述】:
我正在尝试从我的应用程序对象中的 .properties 文件中获取属性。我唯一知道如何做到这一点的是通过Environment 对象。
在我的配置中效果很好...
@Configuration
@ComponentScan(basePackages = {
"com.production"
})
@PropertySource(value = {
"classpath:/application.properties",
"classpath:/environment-${FETTER_ENVIRONMENT}.properties"
})
@EnableJpaRepositories("com.production.repositories")
@EnableTransactionManagement
public class Config {
private static final String PROPERTY_NAME_DATABASE_URL = "db.url";
private static final String PROPERTY_NAME_DATABASE_USER = "db.user";
private static final String PROPERTY_NAME_DATABASE_PASSWORD = "db.password";
private static final String PROPERTY_NAME_HIBERNATE_DIALECT = "hibernate.dialect";
private static final String PROPERTY_NAME_HIBERNATE_FORMAT_SQL = "hibernate.format_sql";
private static final String PROPERTY_NAME_HIBERNATE_SHOW_SQL = "hibernate.show_sql";
private static final String PROPERTY_NAME_ENTITYMANAGER_PACKAGES_TO_SCAN = "entitymanager.packages.to.scan";
@Resource
Environment environment;
但我尝试在另一个类中执行它并且它是空的。我试过使用@Resource 和@Autowired 和手动注入。
Environment 有什么特别之处可以防止这种情况发生吗?
@Component
public class Vendor {
private String token;
@Autowired
private Environment environment;
public Vendor() {
//get token from config
//Environment environment = (Environment) ApplicationContextProvider.getApplicationContext().getBean("environment");
setToken(environment.getProperty("api.vendor.token"));
}
public String getToken() {
return token;
}
public void setToken(String token) {
this.token = token;
}
}
更新:我发现this resource 突出了@Value 的用法,但我的应用程序中没有使用任何XML 配置。
看起来这可能就是我要找的东西:Loading properties in Spring 3.1 programmatically
【问题讨论】:
-
我不认为环境与应用程序上下文加载以外的任何事情相关。
-
我还有其他方法可以从 .properties 文件中获取配置项吗?
-
想到了
@Value注释,但您必须设置PropertyPlaceholderConfigurer。不要引用我的话,但请查一下。
标签: java spring properties dependency-injection