3

tomcat で context.xml ファイルを META-INF フォルダーに配置すると、tomcat はリソースを作成し、そのリソースを検索できます。ここに私のコンテキストファイルがあります:

<Context>
  <Resource 
        name="jdbc/referenceData" 
        auth="Container" 
        type="javax.sql.DataSource"
        description="Reference Data "
        username=" " 
        password="" 
        driverClassName="org.hsqldb.jdbcDriver"
        url=" "/>
</Context>

spring-boot で同じ機能を取得しようとしています。TomcatEmbeddedServletContainer の次のメソッドをオーバーライドしました。

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

                return super.getTomcatEmbeddedServletContainer(tomcat);
            }

            @Override
            protected void postProcessContext(Context context) {
                ContextResource resource = new ContextResource();
                resource.setAuth("Container");
                resource.setName("jdbc/referenceData");
                resource.setType(DataSource.class.getName());
                resource.setProperty("driverClassName", "org.hsqldb.jdbcDriver");
                resource.setProperty("url", "url of jndi");
                resource.setProperty("password", "");
                resource.setProperty("username", "");
                context.getNamingResources().addResource(resource);

            }

しかし問題は、構成クラス (@Configuration 注釈付きクラス) でこの JNDI リソースをルックアップする必要があることです。このリソースを検索したときのコードは次のとおりです。

Context ctx = new InitialContext();        
(DataSource) ctx.lookup(referenceJndiName)

javax.naming.NameNotFoundException: Name [jdbc/referenceData] is not bound in this Context が発生します。Tomcat が完全に準備される前に @Configuration クラスが呼び出されるためです。「java:comp/env/jdbc/referenceData」で検索しようとしましたが、同じ結果です。application.properties ファイルも試しましたが、うまくいきませんでした。毎回エラーが発生します: resource is not bound in this context.

cargo-maven2-plugin のような方法はありますか: 定義された context.xml を埋め込まれた tomcat の context.xml.default にコピーできます。spring-boot-maven-plugin はそのようなことをしていますか? それとも、起動時に JNDI リソースとルックアップをロードできますか?

お時間をいただきありがとうございます。どんな助けでも大歓迎です。

4

0 に答える 0