部署在外部tomcat
需要改一些配置
打成 war 包
<packaging>war</packaging>
移除嵌入tomcat
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!--打war包开启-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
添加servlet api 包
不加此依赖,找不到 HttpSession 等类
<!-- 不加此依赖,找不到 HttpSession 等类 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
增加构建配置
要指定使用 3.0 以上版本,否则启动时因为没有 web.xml 报错
<build>
<plugins>
<!-- 把原来的 spring-boot-maven-plugin 注释掉/删掉-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<!-- 否则报错webxml attribute is required (or pre-existing WEB-INF/web.xml if executing in update) -->
<version>3.0.0</version>
</plugin>
</plugins>
<!-- 打包的包名 -->
<finalName>test</finalName>
</build>
idea 配置 tomcat
由于没有嵌入式 tomcat ,所以启动时,需要配置 tomcat
不需要额外配置,就是正常配置tomcat,如下:
静态文件
静态文件一般在 static 等目录中,不需要改动 和 配置
如果不能访问,可能是过滤器、拦截器导致的
过滤器 Filter 坑
在 java8 中,过滤器 Filter 不需要实现 init() 和 destroy() 方法,在这里是不行的,必须实现这两个方法,而且不能调用 接口中的方法,否则不生效
一般如下:
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
部署到tomcat
打包后,将 war 包 放到 tomcat webapps 目录下即可
其他注意事项
如果需要读取配置文件,一般需要改动
springboot jar 启动,配置文件在 jar中,或者在 jar同级目录中
tomcat war 启动,配置文件在 WEB-INF\classes 中,一般需要下面方式读取:
String path = this.getClass().getResource("/").getPath();
File dbFile = new File(path, Constant.DB_FILE_NAME);
参考:
https://blog.csdn.net/qq_44851613/article/details/116807810
