建议用Springboot自带的,做法很简单,什么都不用改,cmd---cd 项目目录---mvn package=xxx.jar,用的时候就java xxx.jar,清清爽爽。
用第三方的Tomcat,除了网上常说有继承还有packaging改成war
@SpringBootApplication
@ServletComponentScan
@EnableTransactionManagement
public class SpringbootApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(SpringbootApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(SpringbootApplication.class);
}
}
之外,还有些配置要改:
1.去掉Spring-boot自带的logback,否则会报StackOverflowError,因为log4j和logback都实现了slf的某个类,导致死循环。
2.去掉tomcat,因为第三方Tomcat已经有了tomcat相关的lib。报很奇怪的异常,总之这个一定要去掉。
<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> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </exclusion> </exclusions> </dependency>
不想去掉可以把他们写在dependencies里面,然后把scope设置为provided,也行。去掉的本质就是这个。
3.顺序,如果用log4j2的依赖配置一定把它放在spring-boot-web的下面。
4.要用tomcat 8,如果用7的话,报classnotfound:javax.el.elmanager,当把idea安装目录下lib下jasper2.1下的el-api包复制到tomcat的lib下替换掉时,最后还是报java.lang.NoSuchMethodError: javax.el.ExpressionFactory.newInstance(),因为tomcat7的包版本老了,把jasper2.1的包全部复制到tomcat7后他直接无法启动了,所以还是用8好了。
5.在pom.xml文件的build加
<finalName>xxx</finalName>作为项目名
打包的方法一致,把打出的war包放到webapp下即可。