【问题标题】:How to use .properties file in Spring using the Environment object?如何使用环境对象在 Spring 中使用 .properties 文件?
【发布时间】:2015-01-11 16:25:31
【问题描述】:

我对 Spring 中外部属性的工作方式有以下疑问。

例如考虑这个 bean 定义(到一个 Java 配置类中):

@Bean
public DataSource dataSource() {
    DataSource ds = new BasicDataSource();
    ds.setDriverClassName("org.postgresql.Driver");
    ds.setUrl("jdbc:postgresql://localhost/transfer" );
    ds.setUser("transfer-app");
    ds.setPassword("secret45" );
    return ds;
}

好的,你可以看到连接参数是硬编码的,这不好,所以我可以将它们外部化到一个属性文件

阅读文档我发现我也可以使用 Environment 对象从运行时环境中获取属性,例如:

  • JVM 系统属性
  • Java 属性文件
  • Servlet 上下文参数
  • 系统环境变量
  • JNDI

所以在我看来,我可以使用这个 Environment 对象从我的属性文件中获取信息,而不必担心访问它的过程。对吗?

因此,例如,如果我将以下 bean 配置放入 Java 配置类中:

@Configuration
public class ApplicationConfig {

    @Autowired public Environment env;

    @Bean public DataSource dataSource() {
        DataSource ds = new BasicDataSource();
        ds.setDriverClassName( env.getProperty( "db.driver" ));
        ds.setUrl( env.getProperty( "db.url" ));
        ds.setUser( env.getProperty( "db.user" ));
        ds.setPassword( env.getProperty( "db.password" ));

        return ds;
     }
}

这意味着我使用 @Autowired 获得了 Environment 对象(Spring 为我搜索匹配的对象),然后我使用该对象访问 >properties 文件,名为 db.properties,我已将其放入我的代码中。

对吗?

现在我的疑问是:

1) 我的 .properties 文件存在一个标准位置到我的项目中,或者我可以将它们放在任何位置吗?

2) 在前面的代码 sn-p 中,我没有指定特定的 .properties 文件。 Environment 对象如何工作?它会自动加载我项目中的所有 .properties 文件吗?

【问题讨论】:

  • 1.不,2。不。您必须使用 @PropertySource 注释指定要加载的文件。
  • @M.Deinum 好的,tnx。现在更清楚了

标签: java spring properties properties-file


【解决方案1】:
@PropertySources({
 @PropertySource("file:/absolutepath/app.properties"),//IF you want to load from file system using absolute path 
 @PropertySource("classpath:app.properties"),   //IF you want to load from classpath
 @PropertySource("file:{environment_Variable}/app.properties"),   //IF you want to load using envirment varibale 
})

【讨论】:

    【解决方案2】:

    您应该只添加 @PropertySource 注释:

    @Configuration
    @PropertySource({"classpath:/com/your/path/app.properties"})
    public class ApplicationConfig {
    
        @Autowired 
        public Environment env;
    
        @Bean public DataSource dataSource() {
            DataSource ds = new BasicDataSource();
            ds.setDriverClassName( env.getProperty( "db.driver" ));
            ds.setUrl( env.getProperty( "db.url" ));
            ds.setUser( env.getProperty( "db.user" ));
            ds.setPassword( env.getProperty( "db.password" ));
    
            return ds;
         }
    }
    

    我会推荐阅读这个 Spring JavaDoc http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/context/annotation/PropertySource.html

    【讨论】:

      猜你喜欢
      • 2018-07-04
      • 2021-05-27
      • 2013-05-23
      • 2015-09-30
      • 1970-01-01
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      • 2017-12-26
      相关资源
      最近更新 更多