最近在用spring boot 弄了一个学习型的项目,学习一下spring boot怎样构建项目,spring boot 本身是内置tomcat的,如果想部署到外部tomcat, 就要做一些改变。
1 默认打包方式是jar包,改成war包打包,在pom.xml 里
<packaging>war</packaging>
2 在maven里排除自带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>
第二种:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
3 将项目的启动类Application.java继承SpringBootServletInitializer并重写configure方法
@SpringBootApplication
public class BootdoApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(BootdoApplication.class, args);
System.out.println("ヾ(◍°∇°◍)ノ゙ bootdo启动成功 ヾ(◍°∇°◍)ノ゙\n" +
" ______ _ ______ \n" +
"|_ _ \\ / |_|_ _ `. \n" +
" | |_) | .--. .--. `| |-' | | `. \\ .--. \n" +
" | __'. / .'`\\ \\/ .'`\\ \\| | | | | |/ .'`\\ \\ \n" +
" _| |__) || \\__. || \\__. || |, _| |_.' /| \\__. | \n" +
"|_______/ '.__.' '.__.' \\__/|______.' '.__.' ");
}
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// 注意这里要指向原先用main方法执行的Application启动类
return builder.sources(BootdoApplication.class);
}
}
4 在idea 里用maven打包
maven clean and install 就打包完成了,在target下就能找到war包
5 后来发现war包在本地跑没问题,部署到服务器上就无法启动了,查阅spring boot 官方文档发现spring boot 只支持tomcat 8.5 以上版本,而服务器上的版本是7.0.47
需要在pom.xml里指定低版本的tomcat
<properties>
<tomcat.version>7.0.47</tomcat.version>
</properties>
6 使用maven打包, 并找到war包放到Tomcat中的webapps文件夹下
打过的包在项目文件夹的target文件夹下找到war包
放到Tomcat中的webapps文件下
7 启动tomcat, 然后就能访问你的项目了
二 pring boot 两个war包同时在tomcat中部署后启动报错
原因:spring.jmx是默认打开的,所以有两种解决办法
办法1:spring.jmx.enabled=false
办法2:
在application中各自配置
spring.jmx.default-domain=project1
spring.jmx.default-domain=project2
以保证domain是两个不一样的