当我的SpringApplicationContext被一起提升时,我希望从属性文件中获取一些值。根据我的阅读,最好使用PropertySourcesPlaceholderConfigurer。我在我的spring java配置中创建了这个bean,它正确地解析了这些属性。
问题是当我尝试在构建其他spring bean时使用这些属性,就像在我的hibernate配置中一样。在我的hibernate配置中,我有以下字段:
@Value(value = "${myapp.database-access.url}")
public static String DB_ACCESS_URL;
然后我使用该属性来声明url以访问我的数据源bean中的数据库,如下所示:
@Bean
public DataSource dataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(DRIVER_CLASS_NAME);
dataSource.setUrl(DATABASE_URL);
dataSource.setUsername(DATABASE_USERNAME);
dataSource.setPassword(DATABASE_PASSWORD);
return dataSource;
}
不幸的是,此时该值为null,因此我的应用程序引导失败。建设后的价值是可用的,但显然不是建设中期。在这种情况下,有没有办法让@Value注释为我工作,或者我是否必须使用其他东西?
如果我必须使用别的东西,有没有人有任何建议?
答案 0 :(得分:3)
Spring不允许注入静态字段。
一种方法:
public class Config {
public static String DB_ACCESS_URL;
@Value(value = "${myapp.database-access.url}")
public void setDbAccessUrl(String dbAccessUrl) {
Config.DB_ACCESS_URL = dbAccessUrl;
}
}
答案 1 :(得分:2)
我认为这类似于@PropertySource
注释所面临的问题,其中@Value未注入@Configuration
POJO。我发现有两种解决方法:
1)创建一个Spring XML配置(如果你还没有),你将使用@Configuration
在@ImportResource
课程中引用它,并在其中有一个条目:{{ 1}}。该配置应该使<context:property-placeholder />
类上的@Value
注入工作。
2)不要在@Configuration
POJO中使用@Value
,而是注入@Configuration
并从那里检索道具:
Environment