一.jar包部署方式(官方推荐方式,使用简单)
(1)springboot默认工程打包方式为jar包
(2)通过Spring Initializr构建项目,springboot自动在pom文件中添加maven编译插件
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
(3)打包
(4)打包成功后,进入target目录找到打好的.jar包
(5)把jar包上传到服务器
(6)运行项目即可
运行命令:java -jar 包名.jar
二.war包部署方式
(1)pom文件中添加打包方式
//<packaging>jar</packaging>
<packaging>war</packaging>
(2)添加servlet-api依赖
<!--添加servlet-api的依赖,用来打war包 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
(3)排除springboot内置Tomcat启动器,因为打成war后我们会放到外部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>
(4)修改启动类,如果是war包发布,需要增加SpringBootServletInitializer子类,并重写其configure方法,或者将main函数所在的类继承SpringBootServletInitializer,并重写configure方法当时打包为war时上传到tomcat服务器中访问项目始终报404错就是忽略了这个步骤!!!
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})//数据源自动配置类排除
public class SpringbootDataaccessApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(SpringbootDataaccessApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// 注意这里要指向原先用main方法执行的Application启动类
return builder.sources(SpringbootDataaccessApplication.class);
}
}
(5)pom文件中添加maven编译插件
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
(6)执行package打包
(7)把war放入外部Tomcat的web服务器下的webapp包下,启动Tomcat后即可访问
(8)IDEA添加Tomcat,对当前war进行部署
注意:将项目打成war包,部署到外部的tomcat中,这个时候,不能直接访问spring boot 项目中配置文件配置的端口。application.yml中配置的server.port配置的是spring boot内置的tomcat的端口号, 打成war包部署在独立的tomcat上之后, 配置的server.port是不起作用的。一定要注意这一点!!
三.部署方式对比
(1)SpringBoot项目打包时能打成 jar 与 war包,对比两种打包方式:
jar更加简单方便,使用 java -jar xx.jar 就可以启动。所以打成 jar 包的最多。
而 war包可以部署到tomcat的 webapps 中,随Tomcat的启动而启动。
具体使用哪种方式,应视应用场景而定。
(2)打jar包时不会把src/main/webapp 下的内容打到jar包里 (你认为的打到jar包里面,路径是不行的会报404) 打war包时会把src/main/webapp 下的内容打到war包里。
(3)打成什么文件包进行部署与项目业务有关,就像提供 rest 服务的项目需要打包成 jar文件,用命令运行很方便。
(4)而有大量css、js、html,且需要经常改动的项目,打成 war 包去运行比较方便,因为改动静态资源可以直接覆盖,很快看到改动后的效果,这是 jar 包不能比的(项目打成 jar 包运行,一段时间后,前端要对其中某几个页面样式进行改动,使其更美观,那么改动几个css、html后,需要重新打成一个新的 jar 包,上传服务器并运行,这种改动频繁时很不友好,文件大时上传服务器很耗时,那么 war包就能免去这种烦恼,只要覆盖几个css与html即可)