项目背景
项目需要将war包部署到Tomat,然后在网络上踩了许多坑,记录一下
(12条消息) SpringBoot War包形式部署到外部Tomcat_zhuyu19911016520-CSDN博客_springboot打war包部署到tomcat
(12条消息) Win10环境Tomcat安装及环境变量配置教程_LL_Leung的博客-CSDN博客_tomcat windows10
1.配置window下 tomcat环境
- 配置jdk环境
- CATALINA_HOME: 路放置tomcat文件夹的完整路径。D:\apache-tomcat-8.5.73
- 在path后配置:%CATALINA_HOME%\lib 、%CATALINA_HOME%\bin
2.在spring boot中打包
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication app=new SpringApplication(Application.class);
ApplicationContext context = app.run(args);
String serverPort=context.getEnvironment().getProperty("server.port");
log.info("start at http:localhost:"+serverPort);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(Application.class);
}
}
3.pom引入
<packaging>war</packaging>
<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-undertow</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<build>
<finalName>SE</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
注意:如果希望使用外置tomcat需要将原来的tomcat排除,如果希望在正常的项目中使用,需要添加spring-boot-starter-undertow或者tomcat,其中 provided代表在开发环境下存在,打包不包含; javax.servlet-api不引用将无法打包;SE用于确定包的名字;war打包为war包,默认为jar
3.在tomcat中配置
- 如果乱码,将conf/logging.properties 改为java.util.logging.ConsoleHandler.encoding = GBK
- 在server.xml配置
<Service name="testWar">
<Connector port="8088" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="true" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="utf-8"/>
<Engine name="hnswzy" defaultHost="localhost">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
<Host name="localhost" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context path="" reloadable="true" docBase="F:\project\crash\SEquipment\SE_Video_DATA\target\SE">
</Context>
</Host>
</Engine>
</Service>
其中docBase="F:\project\crash\SEquipment\SE_Video_DATA\target\SE"为包的绝对路径(在F:\project\crash\SEquipment\SE_Video_DATA\target\SE.war存在该文件)开启两个服务
- 或者在原service直接修改host标签下添加
<Context path="" reloadable="true" docBase="F:\project\crash\SEquipment\SE_Video_DATA\target\SE">
</Context>