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 文件,但没有运气。每次都给出错误:资源未在此上下文中绑定。

有没有像 cargo-maven2-plugin 那样的方法:它可以将定义的 context.xml 复制到嵌入的 tomcat 的 context.xml.default 中。spring-boot-maven-plugin 是否在做类似的事情?或者我们可以加载 JNDI 资源并在启动时查找?

感谢您的宝贵时间,我们将不胜感激任何帮助。

4

0 回答 0