2016-02-11 94 views
1

我有下面的配置文件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默认的,对我而言是不正确的。

你能帮我吗?

回答

0

目前的解决方案(我不喜欢这么多)是使用它的Java类中@Value

@Value("#{cvlExternalProperties['dbDriverClassName']}") 
private String dbDriverClassName; 

,然后通过使用注释来声明属性