2009-11-22 11 views
6

हम वसंत के JdbcTemplate का उपयोग करते हैं जो नीचे दिखाए गए अनुसार स्प्रिंग कॉन्फ़िगरेशन के माध्यम से कॉन्फ़िगर किया गया है। डेटा स्रोत इंजेक्शन दिए बिना ऐसा करने का कोई तरीका है? मैं का उपयोग कर प्रोग्रामसेटिक रूप से JdbcTemplate उदाहरण और डेटासेट को "initalize" बनाना चाहता हूं।स्प्रिंग के जेडीबीसी टेम्पलेट का प्रोग्रामेटिक रूप से उपयोग कैसे करें?

हमारे वर्तमान config:

जावा वर्ग

private JdbcTemplate jdbcTemplate; 

@Resource(name = "myDataSource") 
public void setDataSource(DataSource dataSource) { 
    this.jdbcTemplate = new JdbcTemplate(dataSource); 
} 

स्प्रिंग config

<jee:jndi-lookup id="myDataSource" jndi-name="java:/TheOracleDS"/> 

ओरेकल डेटा स्रोत config

<xa-datasource> 
     <jndi-name>TheOracleDS</jndi-name> 
     ... 
</xa-datasource> 

अद्यतन: कारण मैं पूछ रहा हूँ यह मैं निर्भरता इंजेक्शन में कुल आस्तिक वसंत सेम का प्रबंधन होने नहीं कर रहा हूँ/है ..

+3

असली सवाल यह है: क्यों इंजेक्शन यहाँ वांछनीय नहीं है? आप इसे खरीदने का प्रस्ताव किस तरह से कर रहे हैं? – duffymo

+2

मैं वसंत जेडीबीसी के साथ पहले गैर इंजेक्शन मार्ग चला गया हूं, लेकिन केवल उपयोगिता वर्गों के लिए जहां मैं डेटाबेस में कुछ जांचने के लिए एक मुख्य विधि चलाने के लिए चाहता हूं। उस मामले में एक एक्सएमएल लिखना और इसे देखना थोड़ा सा लगता है। हालांकि, एक बार जेएनडीआई मिश्रण में है, ऐसा लगता है कि इंजेक्शन का उपयोग करने से बचने के लिए वास्तव में कोई मामला नहीं है। –

उत्तर

3

बस एक कच्चे JNDI देखने का उपयोग करें:

public void setDataSourceName(String name) { 
    InitialContext ctx = new InitialContext(); 
    jdbcTemplate = new JdbcTemplate((DataSource) ctx.lookup(name)); 
} 
5

यहाँ एक परियोजना मैं से प्राप्त होने वाले कुछ नमूना कोड लिखा:

SimpleJdbcTemplate db; 
DataSource dataSource = new SingleConnectionDataSource(System.getProperty(
     "lingcog.db.connectstring"), 
     System.getProperty("lingcog.db.username"), 
     System.getProperty("lingcog.db.password"), false); 

db = new SimpleJdbcTemplate(dataSource); 

शायद मेरे कोड सरल हो सकता है अगर मैं इंजेक्शन का इस्तेमाल किया है, लेकिन यह कैसे इंजेक्शन का उपयोग किए बिना ऐसा करने के लिए का एक अच्छा उदाहरण है।

आप जेडीएनआई नाम से इच्छित डेटा स्रोत को ढूंढने के लिए org.springframework.jdbc.datasource.lookup.JndiDataSourceLookup ऑब्जेक्ट का उपयोग कर सकते हैं।

DataSource dataSource = new JndiDataSourceLookup().getDataSource("java:/TheOracleDS") 
SimpleJdbcTemplate db=new SimpleJdbcTemplate(dataSource); 
6

सुनिश्चित नहीं हैं कि क्यों आप ऐसा करना चाहते हैं लेकिन ... आप वसंत के JndiDataSourceLookup साथ JDNI डेटा स्रोत देखने के हो सकते हैं:

JndiDataSourceLookup lookup = new JndiDataSourceLookup(); 
lookup.setResourceRef(true); // if the lookup occurs in a J2EE container 
DataSource ds = lookup.getDataSource(jndiName); 

या सिर्फ सूर्य की कक्षाओं का उपयोग कर एक "मैन्युअल" लुकअप:

Context ctx = new InitialContext(); 
DataSource ds = (DataSource)ctx.lookup("jdbc/AcmeDB"); 

फिर, JdbcTemplate कन्स्ट्रक्टर के डेटासॉर संदर्भ को पास करें या setDataSource(ds) पर कॉल करें।

लेकिन, जैसा कि मैंने कहा, मुझे नहीं पता कि आप इंजेक्शन का उपयोग क्यों नहीं करना चाहते हैं।

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