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

中使用它