1
  1. Oracle11 DataBase2 つの列 ( 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内部的にDataBase呼び出しを行って、発生したくないプロパティを取得しています。

上記の概念全体は、.properties に存在するすべてのデータを DB に格納し、それを DB から Java コードにフェッチすることに関するものです。

4

1 に答える 1

1

databaseConfiguration からすべてのキーを読み取り、それらを作成されたプロパティ オブジェクトにコピーすることで、プロパティ オブジェクトを作成する FactoryBean を作成できます。

このプロパティ オブジェクトはシングルトンであり、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;
   }
} 

または、DatabaseConfiguration の代わりに、JdbcTemplate を使用できます。

<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 に答える