2011-01-04 12 views
17

में संग्रहीत गुणों के साथ स्प्रिंग बीन्स को कॉन्फ़िगर कैसे करें मेरी प्रोजेक्ट में हम अपने स्प्रिंग प्रबंधित बीन्स के गुणों को बाहरी बनाना चाहते हैं, जो कि मानक जावा। प्रॉपर्टीज फ़ाइलों के साथ करना बहुत आसान है, हालांकि हम एक डीबी तालिका से उन गुणों को पढ़ने में सक्षम होना चाहते हैं जो एक मानचित्र की तरह व्यवहार करते हैं (कुंजी संपत्ति का नाम है, मान उस संपत्ति को आवंटित मान है)।डेटाबेस तालिका

मुझे this post मिला जो Commons Configuration का उपयोग करने का सुझाव देता है लेकिन मुझे नहीं पता कि वसंत 3.x के साथ ऐसा करने का बेहतर तरीका है या नहीं। शायद मेरा खुद का प्रॉपर्टी रिसोर्स या कुछ लागू करना।

कोई सुराग?

उत्तर

22

मैं FactoryBean प्रकार <Properties> का उपयोग करता हूं जिसे मैं JdbcTemplate का उपयोग करके कार्यान्वित करता हूं। इसके बाद आप <context:property-placeholder> तंत्र के साथ उत्पन्न Properties ऑब्जेक्ट का उपयोग कर सकते हैं।

नमूना कोड:

public class JdbcPropertiesFactoryBean 
    extends AbstractFactoryBean<Properties>{ 

    @Required 
    public void setJdbcTemplate(final JdbcTemplate jdbcTemplate){ 
     this.jdbcTemplate = jdbcTemplate; 
    } 
    private JdbcTemplate jdbcTemplate; 

    @Required 
    public void setTableName(final String tableName){ 
     this.tableName = tableName; 
    } 
    private String tableName; 

    @Required 
    public void setKeyColumn(final String keyColumn){ 
     this.keyColumn = keyColumn; 
    } 
    private String keyColumn; 

    @Required 
    public void setValueColumn(final String valueColumn){ 
     this.valueColumn = valueColumn; 
    } 
    private String valueColumn; 

    @Override 
    public Class<?> getObjectType(){ 
     return Properties.class; 
    } 

    @Override 
    protected Properties createInstance() throws Exception{ 
     final Properties props = new Properties(); 
     jdbcTemplate.query("Select " + keyColumn + ", " + valueColumn 
      + " from " + tableName, new RowCallbackHandler(){ 

      @Override 
      public void processRow(final ResultSet rs) throws SQLException{ 
       props.put(rs.getString(1), rs.getString(2)); 
      } 

     }); 
     return props; 
    } 
} 

एक्सएमएल विन्यास:

<bean id="props" class="foo.bar.JdbcPropertiesFactoryBean"> 
    <property name="jdbcTemplate"> 
     <bean class="org.springframework.jdbc.core.JdbcTemplate"> 
      <!-- reference to a defined data source --> 
      <constructor-arg ref="dataSource" /> 
     </bean> 
    </property> 
    <property name="tableName" value="TBL_PROPERTIES" /> 
    <property name="keyColumn" value="COL_KEY" /> 
    <property name="valueColumn" value="COL_VAL" /> 
</bean> 

<context:property-placeholder properties-ref="props" /> 
1

शॉन के सुझाव के अलावा, आप PropertyPlaceholderConfigurer विस्तार कर सकते हैं। दो वर्तमान कार्यान्वयन देखें - PreferencesX और ServletContextX, और अपना खुद का, जेडीबीसी-आधारित रोल करें।

0

"PropertyPlaceholdConfigurer" प्रोग्रामेटिक रूप से बनाने के तरीके हैं, कृपया नीचे देखें।

एक डीएओ लिखें जो गुण पढ़ता है और नीचे दिखाए गए एक संपत्ति प्लेसहोल्डर कॉन्फ़िगरर बनाता है।

XmlBeanFactory factory = new XmlBeanFactory(new FileSystemResource("beans.xml")); 
PropertyPlaceholderConfigurer cfg = new PropertyPlaceholderConfigurer(); 
cfg.setProperties(yourProperties); 
cfg.postProcessBeanFactory(factory); 
संबंधित मुद्दे