在本文中,将探讨如何利用Jakarta Commons Configurations项目中的DatabaseConfiguration,将数据库中的属性加载到Spring应用程序上下文中。通过Spring模块,可以将从commons配置中加载的属性在应用程序上下文中使用。
要按照本文的示例使用commons configuration与Spring集成,需要以下jar文件:spring.jar(Spring核心)、spring-modules.jar(Spring模块)和commons-configuration.jar(Commons配置)。此外,还需要一个可用的数据库。
以下是开始此示例所需的三个jar文件:
在这个示例中,数据库有一个名为TEST_SCHEMA的模式和一个名为APPLICATION_PROPERTIES_TABLE的表,该表有两个列:KEY和VALUE。
KEY | VALUE |
---|---|
key.one | value one |
file.location | somewhere/on/the/filesystem |
pet.dogs.name | bart |
*注意:这只是可用表结构的一个示例。
DatabaseConfiguration是从注入的数据源初始化的,并配置为使用TEST_SCHEMA.APPLICATION_PROPERTIES表加载属性,使用KEY列作为键,VALUE列作为值。
CommonsConfigurationFactoryBean使用DatabaseConfiguration作为其配置(虽然可以有多个,但本示例中未使用)。
PropertyPlaceholderConfigurer使用属性属性设置为CommonsConfigurationFactoryBean。CommonsConfigurationFactoryBean是一个FactoryBean,它创建一个Properties对象。
PropertyPlaceholderConfigurer然后使属性在当前Spring配置文件中的任何bean通过${}符号可用。
PropertiesPrinter然后使用属性file.location、pet.dogs.name和file.location初始化。
File Location : somewhere/on/the/filesystem Pet dogs name : bart Key one : value one
<!-- 需要连接到数据源 -->
<bean name="PropertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="properties" ref="CommonsConfigurationFactoryBean"/>
</bean>
<bean name="CommonsConfigurationFactoryBean" class="org.springmodules.commons.configuration.CommonsConfigurationFactoryBean">
<constructor-arg ref="DatabaseConfiguration"/>
</bean>
<bean name="DatabaseConfiguration" class="org.apache.commons.configuration.DatabaseConfiguration">
<constructor-arg type="javax.sql.DataSource" ref="someDataSource"/>
<constructor-arg index="1" value="TEST_SCHEMA.APPLICATION_PROPERTIES_TABLE"/>
<constructor-arg index="2" value="KEY"/>
<constructor-arg index="3" value="VALUE"/>
</bean>
<!-- 包含以详细说明功能 -->
<bean name="PropertiesPrinter" class="example.PropertiesPrinter" init-method="displayAllProperties">
<property name="fileLocation" value="${file.location}"/>
<property name="petDogsName" value="${pet.dogs.name}"/>
<property name="keyOne" value="${key.one}"/>
</bean>
package example;
public class PropertiesPrinter {
public String fileLocation;
public String petDogsName;
public String keyOne;
public void setFileLocation(String fileLocation) {
this.fileLocation = fileLocation;
}
public void setPetDogsName(String petDogsName) {
this.petDogsName = petDogsName;
}
public void setKeyOne(String keyOne) {
this.keyOne = keyOne;
}
public void displayAllProperties() {
System.out.println("File Location : " + this.fileLocation);
System.out.println("Pet dogs name : " + this.petDogsName);
System.out.println("Key one : " + this.keyOne);
}
}
File Location : somewhere/on/the/filesystem Pet dogs name : bart Key one : value one