在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 annotated class)中查找此JNDI资源。以下是我查找此资源时的代码:
Context ctx = new InitialContext();
(DataSource) ctx.lookup(referenceJndiName)
我得到javax.naming.NameNotFoundException:名称[jdbc / referenceData]未绑定在此Context中。因为在tomcat之前调用的@Configuration类已经完全准备好了。我试过通过&#34; java:comp / env / jdbc / referenceData&#34;但结果相同。我也尝试过application.properties文件,但没有运气。每次都给出错误:资源没有在此上下文中绑定。
有没有像cargo-maven2-plugin那样的方法:它可以将定义的context.xml复制到embaded tomcat的context.xml.default。 spring-boot-maven-plugin是做这样的事吗?或者我们可以在启动时加载JNDI资源并查找吗?
感谢您的时间和任何帮助将受到高度赞赏。