如何在SpringBoot应用程序中定义资源,这相当于传统web.xml中的<resource-ref>?

时间:2017-04-24 10:39:24

标签: spring-boot jndi servlet-3.0

我正在开发一个使用SpringBoot 1.4.3-RELEASE开发的项目。

根据公司内部文件,它要求我们在WEB-INF / web.xml中为每个应用程序定义一个。示例如下:

<resource-ref>
    <res-ref-name>connectivityConfiguration</res-ref-name>
    <res-type>com.hide-my-company-name.ConnectivityConfiguration</res-type>
</resource-ref>

然后使用JNDI查找来获取某个对象。但是我没有WEB-INF / web.xml。

因此,我在本地tomcat context.xml中定义了资源,而不是WEB-INF / web.xml。

<Context>
    <Resource name="connectivityConfiguration" 
              type="com.hide-my-company-name.ConnectivityConfiguration" />
</Context>

有效。但是,仅在我的本地开发环境中。 因为我无法在部署后更改'context.xml'或'server.xml'。

问题: 有没有其他方法可以使用SpringBoot定义相同的资源?例如。通过。 Java代码,还是通过application.properties?

1 个答案:

答案 0 :(得分:0)

@SpringBootApplication
public class WebApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(WebApplication.class);
    }

    public static void main(String[] args) throws Exception {
        SpringApplication.run(WebApplication.class, args);
    }

    @Bean
    public TomcatEmbeddedServletContainerFactory tomcatFactory() {
        return new TomcatEmbeddedServletContainerFactory() {

            @Override
            protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer(Tomcat tomcat) {
                tomcat.enableNaming();
                return super.getTomcatEmbeddedServletContainer(tomcat);
            }

            @Override
            protected void postProcessContext(Context context) {
                ContextResource resource = new ContextResource();
                resource.setName("connectivityConfiguration");
                resource.setType("com.hide-my-company-name.ConnectivityConfiguration");
                context.getNamingResources().addResource(resource);
            }
        };

}
}