- A+
前言
最近遇到一个老项目,是springmvc前后不分离的经典webapp工程,需要嵌入到SpringBoot框架中。整合的过程可以说是困难重重,很多地方还要多做一些处理工作才能将两者兼容。此处说一下项目中遇到的一个打包问题。我们都知道,SpringBoot内嵌了web容器(tomcat、jetty等)默认是打成jar包,直接运行,不需要外部的Tomcat容器。
然而本项目打包成jar之后,启动报错了。原因是老项目中的wabacus框架年代久远,长期没有维护,不支持读取jar内的文件(技术上其实可以读取到),而我的项目本身就是打包成的jar,以jar 的方式运行,导致启动失败。
委曲求全,新项目还是打成war包,放在外置的Tomcat容器中运行。
开发步骤
-
调整pom文件
项目maven的打包方式由jar改为war
<packaging>war</packaging>
-
pom中添加Tomcat依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency>
-
设置,打包后的项目访问名称,在build节点里设置文件名
<build> <finalName>ROOT</finalName> <plugins> ... </plugins> </build>
-
更改SpringBoot启动类
由于我们需要使用外部Tomcat服务器部署war包,所以不能使用创建项目的application.java 这个main方法了,需要重写一个类似于 web.xml 文件配置的方式来启动 Spring 应用上下文,此时我们需要声明一个类,这个类的作用与在 web.xml 中配置负责初始化 Spring 应用上下文的监听器作用类似。
我本人是直接将SpringBoot启动类继承SpringBootServletInitializer的方式来进行配置的。最重要的步骤就是重写SpringBootServletInitializer类的configure方法。
```
@SpringBootApplication
@ServletComponentScan
public class IdaApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(IdaApplication.class);
}
@Override
public void onStartup(ServletContext servletContext) throws ServletException {
servletContext.setInitParameter("configpath", "classpath{/reportconfig}");
super.onStartup(servletContext);
}
public static void main(String[] args) {
SpringApplication.run(IdaApplication.class, args);
}
}
```
至此,可以运行mvn clean package ,将打包好的war文件放到Tomcat容器中运行。
- 我的微信
- 这是我的微信扫一扫
- 我的微信公众号
- 我的微信公众号扫一扫