当前位置: 首页 > 知识库问答 >
问题:

在Spring Boot嵌入式Tomcat中阅读context.xml

呼延鹏云
2023-03-14

在将非spring应用程序转换为Spring Boot时,您希望使用现有上下文。嵌入tomcat中的xml文件。

使用Spring Boot 1.5.1和Tomcat 8.5.11

TomcatEmbeddedServletContainerFactory配置

@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) {
            // Try-1 - Not Working
            if (context instanceof StandardContext) {
                StandardContext standardContext = (StandardContext) context;
                standardContext.setCopyXML(true);
            }

            // Try-2 - Not Working
            context.setConfigFile(Paths.get("/META-INF/context.xml").toFile().toURI().toURL());

            // Try-3 - Working - But due to very large and multiple configuration, java config will be cumbersome
            ContextResource resource = new ContextResource();
            resource.setName("jdbc/myDB");
            resource.setType(DataSource.class.getName());
            resource.setAuth("Container");
            resource.setProperty("username", "user111");
            resource.setProperty("password", "password111");
            resource.setProperty("driverClassName", "com.mysql.cj.jdbc.Driver");
            context.getNamingResources().addResource(resource);
       }
}

检查数据库连接的方法,

public void checkDb() {
    Context initContext = new InitialContext();
    Context envContext = (Context) initContext.lookup("java:/comp/env");
    DataSource datasource = (DataSource) envContext.lookup("jdbc/myDB");
    Connection con = datasource.getConnection();
}

那么如何在Spring Boot中加载现有的context.xml。

共有1个答案

王炜
2023-03-14

我认为作为一个变体,你可以配置你的tomcat目录的路径,并在带有嵌入式容器的Spring引导Spring文档中使用它。

 类似资料:
  • 我有时会在pom中看到以下声明。xml。。。 如您所见,sping-boo-starter-web被声明为tomcat-embed-jasper。 是不是sping-boo-starter-web已经有一个嵌入式tomcat了?为什么一些开发人员仍然声明tomcat-embed-jasper以及boot-starter-web?还是有什么原因?

  • 我需要将我的Spring Boot ZuL网关中的MaxKeepAliverRequests值修改为高于默认值100的值。注意到该值未在Spring Boo的公共属性列表中公开,我尝试通过@Configuration class设置属性: 但似乎并没有起到预期的效果。有没有一种合适的方法可以让我更改没有通过Spring common properties公开的Tomcat属性?

  • 问题内容: 我需要在Tomcat中启动Hazelcast,而无需单独的war文件。因此,将hazelcast.jar放入lib文件夹中的hazelczast.xml某处…接下来呢?还是不可能? 问题答案: 第一步是好的,只需将Hazelcast lib和配置放在Tomcat的libs文件夹中。接下来,如果您不需要单独的WAR文件,则是构建一个小的Valve类来启动/关闭Hazelcast节点。问题

  • 问题内容: 我正在尝试使用Jackson 2.0-RC3读取旧版JSON代码,但是我陷入了“嵌入式”对象的困境。 给定以下JSON: 如何将其映射到以下结构: 我试图这样做,但似乎我必须以这种方式映射整个对象。 问题答案: 要处理“嵌入式”对象,您应该使用它-等同于Hibernate的/ 。

  • 使用Spring Boot和启用LoadTimeWeaving的嵌入式tomcat,缓存方面在运行时没有任何影响,但我们看到在日志中编织的情况很好。 下面是配置,LoadTimeWeave与模式一起启用,作为用于缓存的AsheJ Spring代理-javaagent:..//Spring-仪表-4.3.3。释放。罐子 原木 围绕这个有很多讨论。编织发生在RestartClassLoader上,不确

  • 我正在使用NetBeans IDE和带有Spring Boot的Maven。每当我运行我的应用程序不止一次,我就会得到这个错误: O.A.Coyote.http11.http11nioprotocol:无法启动与ProtocolHandler关联的终结点[“http-nio-8080”] spring boot java.lang.IllegalStateException:Tomcat连接器处于