1
  1. 我有一个Oracle11 DataBase有两列的表(KEY(varchar2)PROPERTY(varchar2))的表。
  2. 通过使用 Spring 框架,我想将表中的全部内容(所有行)加载到 Spring Bean 中,而不是从DataBase中获取值我就可以使用 Bean
  3. 我使用了 Bean 类“ org.apache.commons.configuration.DatabaseConfiguration”。它工作正常,但是这个 bean 类没有将整个表格内容加载到其中的规定。

PFB,我的 Spring-config.xml:

 <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="dataSource"/>
        <constructor-arg type="java.lang.String" index="1" value="schema.Table_Name1"/>
        <constructor-arg type="java.lang.String" index="2"  value="KEY"/>
        <constructor-arg type="java.lang.String" index="3" value="PROPERTY"/>
</bean>

<bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
        <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>
        <property name="url" value="jdbc:oracle:thin:SYSTEM_NS:PORT:sid"/>
        <property name="username" value="xxxx"/>
        <property name="password" value="xxxx"/>
    </bean>

Java 代码:

ApplicationContext classpathCtx = new ClassPathXmlApplicationContext("Spring-config.xml");
DatabaseConfiguration dBConfig = (DatabaseConfiguration)classpathCtx.getBean("databaseConfiguration");

// To display the value in the property column by sending the value of column KEY
System.out.println(dBConfig.getProperty("Value in the KEY column"));

上面的代码工作正常。但是每次我向DatabaseConfiguration它发送密钥时,都会在内部进行数据库调用以获取我不希望发生的属性。

整个上述概念都是关于尝试将 .properties 中存在的所有数据存储到 DB 并将其从 DB 获取到我的 Java 代码。

4

1 回答 1

1

您可以创建一个 FactoryBean,通过从 databaseConfiguration 读取所有键并将它们复制到创建的属性对象来创建属性对象。

这个属性对象是一个单例,可以在你的spring配置中使用。

<bean name="properties" class="...ConfigurationPropertiesFactoryBean">
   <property name="configuration" ref="databaseConfiguration"/>
</bean>

public class ConfigurationPropertiesFactoryBean implements FactoryBean<Properties>
{
   private Properties props = new Properties();
   public void setConfiguration(Configuration configuration)
   {
     props.put ...
   }
   public Properties getObject()
   {
      return props;
   }
} 

或者,您可以使用 JdbcTemplate,而不是 DatabaseConfiguration:

<bean name="properties" class="...DataSourcePropertiesFactoryBean">
   <property name="dataSource" ref="dataSource"/>
</bean>

public class DataSourcePropertiesFactoryBean implements FactoryBean<Properties>
{
   private Properties props = new Properties();
   public void setDataSource(DataSource dataSource)
   {
     props = new JdbcTemplate(dataSource).query("SELECT KEY, PROPERTY FROM ...", 
       new ResultSetExtractor(){
        public void Properties extractData(ResultSet rs)
        {
           props.put(...);
        }
     });
   }
   public Properties getObject()
   {
      return props;
   }
} 
于 2012-07-05T12:51:17.693 回答