IEDA打包springboot项目部署的注意事项
1.springboot自带tomcat,打包后部署项目是放在linux系统内tomcat的webapps中,使用linux的tomcat服务器运行。因此在打包前需要排除springboot自带的tomcat.
<!--引入springboot的web支持依赖-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- 去除内嵌tomcat -->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--如果springboot项目中引入了解析jsp的依赖,需要将scope设置为provided-->
<!-- 引入springboot 与 jsp的集成jar-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
2.需要制定打包方式为war.
3.打包后yml文件中配置的访问路径失效,访问路径变为war包的名字.
4.修改入口类
package com.baizhi;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;
@SpringBootApplication
@MapperScan("com.baizhi.dao")
//修改入口类以便打包
public class Application extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(Application.class);
}
}
5.在pom文件中指定入口类
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<!--使用热部署出现中文乱码解决方案-->
<configuration>
<fork>true</fork>
<!--增加jvm参数-->
<jvmArguments>-Dfile.encoding=UTF-8</jvmArguments>
<!--指定入口类-->
<mainClass>com.baizhi.Application</mainClass>
</configuration>
</plugin>
</plugins>
</build>
常见的报错信息:
1.打包后浏览器中发送请求显示404,在确保请求路径正常后仍出现404,可能是打包出现问题。我在打包时发现使用插件中的war命令打包一直出现404,最后改为使用lifecicle中的package打包,解决了404错误。
2.浏览器控制台显示发送请求状态为pending,我的项目部署在虚拟机上,访问的是宿主机的mysql。出现这个问题,我查看了tomcat的日志,发现问题是宿主机中的mysql只允许localhost访问。将访问权限修改为允许所有ip访问后解决。