【发布时间】:2015-01-17 03:46:48
【问题描述】:
我开始编写应用程序,我想在 java 代码中包含尽可能多的 spring 配置。我遇到的问题是属性文件。看看我到目前为止写了什么:
包含 bean 声明的文件:
@Configuration
@ImportResource("classpath:properties-configuration.xml")
public class ContextConfigutarion {
@Value("${database.url}")
private String database_url;
@Value("${database.user}")
private String database_user;
@Value("${database.password}")
private String database_password;
@Value("${database.default.shema}")
private String database_default_shema;
@Bean
public BasicDataSource dataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setDriverClassName(com.mysql.jdbc.Driver.class.getName());
dataSource.setUrl(database_url);
dataSource.setUsername(database_user);
dataSource.setPassword(database_password);
return dataSource;
}
@Bean
public LocalSessionFactoryBean sessionFactory() {
LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
sessionFactory.setDataSource(dataSource());
sessionFactory.setHibernateProperties(hibernateProperties); // <- here I encountered a problem
return sessionFactory;
}
...
}
properties-configuration.xml 是最小必要文件,仅用于指定文件属性位置:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:property-placeholder location="classpath:database.properties" />
</beans>
当我开始配置 sessionFactory 对象时,我发现了一个问题。正如我在 ContextConfiguration 类中所了解的,我必须从我的 database.properties 文件中减去每个属性。如果我的应用程序有很多属性,那么我的配置 java 代码就会冗余增长。没有更好的方法通过 Spring 将属性传输到我的组件而不提取每个组件。
第二个相关问题:有什么好的方法可以在树状结构中保存应用程序属性?因为正如您在上面的示例应用程序属性中看到的那样,包含:数据源属性、休眠属性等,实际上是属性树。如果我的应用程序应该更大并且有更多的组件在树状结构中保留属性会很棒。我想象我有存储在这样的目录中的属性:
/application
/hibernate
filename.properties
/database
filename.properties
/someOddComponent
/someStrangeComponent
filename.properties
filename.properties
filename.properties
因此,如果我要求 application.properties,我将获得应用程序目录(和子目录)中所有 .properties 文件的总和,如果我要求 hibernate.properties,我将获得所有 .properties 文件休眠目录(和子目录)的总和目录)等。也许我在这里夸大了问题,你怎么看?
【问题讨论】:
标签: java spring hibernate properties