2016-12-14 10 views
7

今すぐSpringブートを調べて、Java configを使用し、最終的にはweb.xmlを使わずに正しく実行したいと考えています。ですから、生産環境には古典的なWARファイルが必要です。まだSpringブートでweb.xmlにresource-refが必要です

したがって、私はpom.xmlファイル内にWARパッケージを指定しており、メインアプリケーションクラスはSpringBootServletInitializerです。

うまく動作します。現在、生産環境では、DatasourceJNDIでプロビジョニングされています。私がやった

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

すべての研究はでそれを置き換える私はweb.xmlを取り除くことができるであろうことを示していると思われると:古典的な春のアプリでは、次のようにresource-refを使用してweb.xmlでこの依存関係を参照します(META-INFフォルダ内)のそれぞれのcontext.xmlファイル:

<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]を参照してください。

私は、Spring Bootアプリケーションではうまくいかない根本的な原因は、Spring Bootのブートストラッププロセスに関係していると思うのですが、実際には何かヒントを探しています。 !!!

ご協力いただきましてありがとうございます。

答えて

0

デフォルトでは、埋め込みTomcatではJNDIが無効になっています。

次のコードを使用して、tomcatでJNDIを有効にすることができます。以下のコードは、DataSource spring beanの初期化に役立ちます。

@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); 
     } 
    }; 
} 

コントローラ内の自動配線を使用してDataSource Beanを使用できます。

@Autowired 
private DataSource dataSource; 
関連する問題