2016-12-14 7 views
7

में रिसोर्स-रेफ की आवश्यकता है, अभी स्प्रिंग बूट में देख रहे हैं और जावा कॉन्फ़िगरेशन और अंततः web.xml के बिना इसे ठीक से करना चाहते हैं। तो, मुश्किल हिस्सा यह है कि उत्पादन पर्यावरण को क्लासिक WAR फ़ाइल की आवश्यकता होती है।स्प्रिंग बूट को अभी भी web.xml

इसलिए, मुझे WAR मेरे मैवेन pom.xml फ़ाइल के भीतर पैकेजिंग निर्दिष्ट किया गया है और मुख्य एप्लिकेशन वर्ग SpringBootServletInitializer फैलाता है।

ठीक काम करता है। अब, मुश्किल हिस्सा यह है कि उत्पादन वातावरण में DatasourceJNDI के माध्यम से प्रावधान किया गया है। एक क्लासिक वसंत ऐप्लिकेशन में आप web.xml में इस निर्भरता का संदर्भ इस प्रकार एक resource-ref का उपयोग कर होगा:

<resource-ref> 
    <res-ref-name>jdbc/DefaultDB</res-ref-name> 
    <res-type>javax.sql.DataSource</res-type> 
</resource-ref> 

सभी अनुसंधान मैंने किया था एक और इसकी जगह संकेत मिलता है कि मैं web.xml से छुटकारा पाने में सक्षम होगा लगता है और संबंधित context.xml फ़ाइल (META-INF फ़ोल्डर में):

<Resource name="jdbc/DefaultDB" 
      auth="Container" 
      type="javax.sql.DataSource" 
      factory="com.sap.jpaas.service.persistence.core.JNDIDataSourceFactory"/> 

दुर्भाग्य से वह काम नहीं करता:/

दिलचस्प बात यह है कि एक सादे servlet3 वेब अनुप्रयोग बस काम करता है ठीक है, [https://github.com/steinermatt/servlet3-sample] देखें।

तो, मुझे विश्वास है कि मूल कारण यह स्प्रिंग बूट ऐप के लिए काम नहीं करता है, स्प्रिंग बूट बूटस्ट्रैपिंग प्रक्रिया से संबंधित है ... इसलिए, वास्तव में किसी भी संकेत की तलाश में, सुझाव क्या हो सकता है हो !!!

किसी भी मदद की सराहना की जाती है!

उत्तर

0

डिफ़ॉल्ट रूप से, जेएनडीआई एम्बेडेड टोमकैट में अक्षम है।

आप टॉमकैट में जेएनडीआई को सक्षम करने के लिए निम्नलिखित कोड का उपयोग कर सकते हैं। निम्नलिखित कोड आपको डेटासोर्स वसंत बीन शुरू करने में मदद करेगा।

@Bean 
public TomcatEmbeddedServletContainerFactory tomcatFactory() { 
    return new TomcatEmbeddedServletContainerFactory() { 

     @Override 
     protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer(
       Tomcat tomcat) { 
      tomcat.enableNaming(); 
      return super.getTomcatEmbeddedServletContainer(tomcat); 
     } 

     @Override 
     protected void postProcessContext(Context context) { 
      ContextResource resource = new ContextResource(); 
      resource.setName("jdbc/myDataSource"); 
      resource.setType(DataSource.class.getName()); 
      resource.setProperty("driverClassName", "your.db.Driver"); 
      resource.setProperty("url", "jdbc:yourDb"); 

      context.getNamingResources().addResource(resource); 
     } 
    }; 
} 

आप ऑटो-वायरिंग का उपयोग कर अपने नियंत्रक में डेटासोर्स बीन का उपयोग कर सकते हैं।

@Autowired 
private DataSource dataSource;