【发布时间】: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