美文网首页
记一次springboot用外部tomcat部署踩的坑

记一次springboot用外部tomcat部署踩的坑

作者: 桐间纱路 | 来源:发表于2021-04-08 18:29 被阅读0次

springboot打war包配置外部tomcat

pom.xml中的配置

  1. 添加<packaging>war</packaging>
  2. 排除tomcat依赖
<dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-web</artifactId>
          <exclusions>
              <exclusion>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-tomcat</artifactId>
              </exclusion>
          </exclusions>
      </dependency>
  1. 添加servlet-api依赖
<dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>

启动类配置

继承SpringBootServletInitializer并重写configure方法

public class ImageStorageApplication extends SpringBootServletInitializer {

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

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(ImageStorageApplication.class);
    }
}

完成上述配置就可以打war包在外部tomcat中启动了,但是在配置过程中,我依然遇到了几个问题

问题

  1. 无法使用ServletContextListener,该监听器可以监听Context也就是容器的创建和销毁,在springboot中使用是没有问题的,但是在外部tomcat中会报错,原因暂不明确,如果要监听容器创建,可以继承ApplicationRunner,并重写run方法。如果想在容器销毁时做一些事儿,暂时没找到好的办法。
  2. Filter相关
    • springboot的Filter和外部Tomcat的Filter是有区别的,springboot的Filter的init()和destroy()方法都是default的,但是外部tomcat的这两个方法都是抽象的,如果不重写会报错。
    • springboot的启动顺序和外部tomcat不一样,外部tomcat的Filter会在Spring容器之前初始化,也就是Filter中的@Autowire和@Value等注入属性都是null,会报错,解决方法是,设置成static,然后再赋值:

修改

@Value("${server.servlet.context-path}")
private String contentPath;

为:

private static String contentPath;

@Value("${server.servlet.context-path}")
public void setContentPath(String contentPath) {
    LoginFilter.contentPath = contentPath;
}

相关文章

网友评论

      本文标题:记一次springboot用外部tomcat部署踩的坑

      本文链接:https://www.haomeiwen.com/subject/hjmvkltx.html