在Spring启动时获取tomcat-context.xml功能,并在启动时获取查找资源

时间:2015-02-19 22:14:03

标签: java spring spring-boot jndi embedded-tomcat-7

在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资源并查找吗?

感谢您的时间和任何帮助将受到高度赞赏。

0 个答案:

没有答案