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 リソースとルックアップをロードできますか?
お時間をいただきありがとうございます。どんな助けでも大歓迎です。