2016-01-13 2 views
6

वर्तमान में मैं xml को जावा कॉन्फ़िगरेशन में परिवर्तित कर रहा हूं। लेकिन मैं कुछ हिस्सों में फंस गया कि मैं कई दिनों से शोध कर रहा हूं। यहाँ समस्या:jndi लुकअप को xml से java config में परिवर्तित करने के लिए कैसे करें

Xml config:

<jee:jndi-lookup id="dbDataSource" jndi-name="${db.jndi}" resource-ref="true" />

इस के लिए

:

@Bean(name = "dbDataSource") 
public JndiObjectFactoryBean dataSource() { 
    JndiObjectFactoryBean bean = new JndiObjectFactoryBean(); 
    bean.setJndiName("${db.jndi}"); 
    bean.setResourceRef(true); 
    return bean; 
} 

और यह:

 <jee:jndi-lookup id="dbDataSource" jndi-name="${db.jndi}" resource-ref="true" /> 

    <beans:bean id="jdbcTemplate" 
    class="org.springframework.jdbc.core.JdbcTemplate" > 
    <beans:property name="dataSource" ref="dbDataSource"></beans:property> 
    </beans:bean> 

अब तक मैं इस कोड को परिवर्तित करने में कामयाब

 <beans:bean id="jdbcTemplate" 
    class="org.springframework.jdbc.core.JdbcTemplate" > 
    <beans:property name="dataSource" ref="dbDataSource"></beans:property> 
    </beans:bean> 
इस के लिए

:

@Bean(name = "jdbcTemplate") 
public JdbcTemplate jdbcTemplate() { 
    JdbcTemplate jt = new JdbcTemplate(); 
    jt.setDataSource(dataSource); 
    return jt; 
    } 

समस्या विधि setDataSource() जरूरत डेटास्रोत वस्तु है, लेकिन मुझे यकीन है कि दोनों bean.How डेटा स्रोत को JndiObjectFactoryBean पारित करने के लिए संबंधित के लिए कैसे नहीं कर रहा हूँ?

या मुझे किसी अन्य विधि का उपयोग करने की आवश्यकता है?

अतिरिक्त प्रश्न:

bean.setJndiName("${db.jndi}"), $ {db.jndi} गुण का उल्लेख है फ़ाइल लेकिन मैं हमेशा NameNotFoundException, यह कैसे काम करने के लिए मिल गया?

धन्यवाद !!

उत्तर

12

JndiObjectFactoryBean के बजाय JndiDataSourceLookup का उपयोग करें। विधि में ${db.jndi} का उपयोग करने के लिए विधि तर्क घोषित करें और इसे @Value के साथ एनोटेट करें।

@Bean(name = "dbDataSource") 
public DataSource dataSource(@Value("${db.jndi}" String jndiName) { 
    JndiDataSourceLookup lookup = new JndiDataSourceLookup(); 
    return lookup.getDataSource(jndiName); 
} 

Autowired तरीकों और कंस्ट्रक्टर भी @Value एनोटेशन का उपयोग कर सकते हैं। वसंत संदर्भ गाइड।

@Bean तरीकों मूल रूप से कारखाने के तरीकों जो भी ऑटो तार तरीकों इस श्रेणी में इस तरह के पतन के रूप में कर रहे हैं और कर रहे हैं।

के लिए अपने कारखाने विधि में JdbcTemplate आप बस एक DataSource विधि तर्क का उपयोग डेटा स्रोत के लिए एक संदर्भ पाने के लिए कर सकते हैं (यदि आप अनेक आप सकें कि आप उपयोग करना चाहते हैं निर्दिष्ट करने के लिए विधि तर्क पर @Qualifier का उपयोग कर सकते हैं, तो)।

@Bean 
public JdbcTemplate jdbcTemplate(DataSource ds) { 
    return new JdbcTemplate(ds); 
} 
+0

धन्यवाद काम कर रहा है लेकिन उसके बाद '@value (" $ {db.jndi} "' – FreezY

+1

मेरे सिर से यह टाइप स्ट्रिंग जोड़ने की जरूरत है, याद किया 'स्ट्रिंग', अब तय की। –

संबंधित मुद्दे