在 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 文件,但没有运气。每次都给出错误:资源未在此上下文中绑定。
有没有像 cargo-maven2-plugin 那样的方法:它可以将定义的 context.xml 复制到嵌入的 tomcat 的 context.xml.default 中。spring-boot-maven-plugin 是否在做类似的事情?或者我们可以加载 JNDI 资源并在启动时查找?
感谢您的宝贵时间,我们将不胜感激任何帮助。