Spring通过@Value从@PropertySource注入java.util.Properties或Map

时间:2014-07-23 21:59:29

标签: java spring

我在@Configuration类中有以下内容

@PropertySource(name = "applicationProperties", value = {
        "classpath:application.properties",
        "classpath:${spring.profiles.active}.properties",
        "classpath:hibernate.properties",
"classpath:${spring.profiles.active}.hibernate.properties" })

我希望将所有属性检索为java.util.Properties对象,或者使用@Value通过前缀将其过滤为属性的子集。

//This works but only gives System.properties
@Value("#{systemProperties}")
private Properties systemProperties;

//I want to do this, but I can't find a way to make it work with Spring EL if there is a way.
@Value("#{application.Properties}")
private Properties appProperties;

我正在使用纯java配置,我只需要以某种方式获取由@PropertySource配置的属性。 Spring Environment只允许您一次获得一个属性。

简而言之,我真正想要的是所有以hibernate为前缀的属性。*

1 个答案:

答案 0 :(得分:4)

请参阅以下链接:

http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

如果你或者可以使用Spring Boot,那么你可以做这样的事情:

@Component
@ConfigurationProperties(locations = "classpath:config/hibernate.properties", prefix = "hibernate")
public class HibernateProperties {

    Properties datasource = new Properties();

    public Properties getDatasource() {
        return datasource;
    }

}

和hibernate.properties文件:

hibernate.datasource.initialize=false
hibernate.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver
hibernate.datasource.url=jdbc:sqlserver://xxx;DatabaseName=yyy
hibernate.datasource.username=user
hibernate.datasource.password=passwd

看到 hibernate 是前缀,数据源是属性对象的名称。所以你可以调用datasource.get(“initialize”)等属性。

您可以在任何地方注入HibernateProperties类并调用getProperties方法来获取hibernate属性。 希望这会有所帮助。