Spring Java 配置。配置文件中PropertiesFactoryBean的使用
Spring Java Config. Use of PropertiesFactoryBean in the configuration file
我有以下配置文件
@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
我可以通过哪些方式使用 datasource() 方法中的 cvlProperties?
我试过了
env.getProperty("dbDriverClassName")
env.getProperty("#cvlProperties['dbDriverClassName']")
但我无法检索属性。
字段 dbDriverName 已正确填写,这意味着 bean 声明是正确的。
我想使用 PropertyFactoryBean class 因为这样我可以指定要使用的编码。
如果我在配置上面使用下面的注解class
@PropertySource("file:${MY_ENV_VAR}/external.properties")
我可以用这段代码检索属性
env.getProperty("dbDriverClassName")
但是 PropertySource 注释使用的编码是 windows 默认编码,对我来说是不正确的。
你能帮帮我吗?
目前解决方案(我不太喜欢)是使用注解@Value
声明属性
@Value("#{cvlExternalProperties['dbDriverClassName']}")
private String dbDriverClassName;
然后在 java class
中使用它
我有以下配置文件
@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
我可以通过哪些方式使用 datasource() 方法中的 cvlProperties? 我试过了
env.getProperty("dbDriverClassName")
env.getProperty("#cvlProperties['dbDriverClassName']")
但我无法检索属性。 字段 dbDriverName 已正确填写,这意味着 bean 声明是正确的。 我想使用 PropertyFactoryBean class 因为这样我可以指定要使用的编码。
如果我在配置上面使用下面的注解class
@PropertySource("file:${MY_ENV_VAR}/external.properties")
我可以用这段代码检索属性
env.getProperty("dbDriverClassName")
但是 PropertySource 注释使用的编码是 windows 默认编码,对我来说是不正确的。
你能帮帮我吗?
目前解决方案(我不太喜欢)是使用注解@Value
声明属性@Value("#{cvlExternalProperties['dbDriverClassName']}")
private String dbDriverClassName;
然后在 java class
中使用它