Spring Java配置。在配置文件中使用PropertiesFactoryBean的
问题描述:
我有下面的配置文件Spring Java配置。在配置文件中使用PropertiesFactoryBean的
@Configuration
@ComponentScan(basePackages = "com.foo")
@EnableTransactionManagement
public class AppSpringConfiguration {
@Autowired
private Environment env;
@Autowired
private ApplicationContext appContext;
@Value("#{cvlExternalProperties['dbDriverClassName']}")
private String dbDriverName;
@Bean
public PropertiesFactoryBean cvlExternalProperties() {
PropertiesFactoryBean res = new PropertiesFactoryBean();
res.setFileEncoding("UTF-8");
res.setLocation(new FileSystemResource(env.resolvePlaceholders("${MY_ENV_VAR}") + "external.properties"));
return res;
}
@Bean
public BasicDataSource datasource() {
BasicDataSource basicDataSource = new BasicDataSource();
basicDataSource.setDriverClassName("myDriverClassName");
basicDataSource.setUrl("MyDbUrl");
basicDataSource.setUsername("myUser");
basicDataSource.setPassword("myPass");
return basicDataSource;
}
}
和外部属性文件我已经
dbUrl=jdbc:mysql://localhost:3306/someDb
dbUser=someUser
dbPassword=somePass
dbDriverClassName=com.mysql.jdbc.Driver
在哪种方式,我可以使用数据源里面的cvlProperties () 方法?我试过
env.getProperty("dbDriverClassName")
env.getProperty("#cvlProperties['dbDriverClassName']")
但我无法检索属性。 字段dbDriverName被正确填充,所以这意味着bean声明是可以的。 我想使用PropertyFactoryBean类,因为通过这种方式我可以指定要使用的编码。
如果我使用下面的注释上的配置类
@PropertySource("file:${MY_ENV_VAR}/external.properties")
我能够检索与这段代码
env.getProperty("dbDriverClassName")
属性的顶部,但所使用的编码PropertySource注解是Windows默认的,对我而言是不正确的。
你能帮我吗?
答
目前的解决方案(我不喜欢这么多)是使用它的Java类中@Value
@Value("#{cvlExternalProperties['dbDriverClassName']}")
private String dbDriverClassName;
,然后通过使用注释来声明属性