一. 打jar包:程序新建时采用jar形式
1. pom文件中引入maven打包插件:
mainmClass中指定程序的入口,只要写明启动类全称
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<maimClass>com.stu.MybatisApplication</maimClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
2. 选中项目右击--->Showin--->Terminal
执行mvn clean清除target中的所有文件,然后执行mvn package,在target中会有打好的包XXXX.jar
3. 启动cmd,切换到target文件目录下,执行 java -jar XXX.jar即可启动项目。
二. 打war包
SpringBoot是内嵌Tomcat服务器,所以每次重新启动都是用的新的Tomcat服务器,一个tomcat中只能部署一个项目,无法做到部署多个项目;为了在一个tomcat中部署多个项目,需要使用外部tomcat。也因为每次启动项目就使用新的tomcat服务器,出现了一个问题:
上传到项目的文件,如果是保存在项目中的,那么重启过后文件就会丢失。比如我们上传了一个头像,重启项目后,这个头像就没了。而如果将文件保存在本地磁盘中的话,html中标签没办法获取。因此,我们才需要将SpringBoot项目打成war包,放到Tomcat中去运行。
使用外部tomcat部署war项目的步骤如下:
1. 1 同打jar,pom中引入maven打包插件;
1.2 pom文件中加<packaging>war</packaging>,表明该项目为war项目;
1.3 web依赖中剔除自带的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>
1.4 加入临时的tomcat,以保证本地使用:
provided表示打包时该依赖不会进入war包,以防止与外部的tomcat相冲突
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
2. 启动类:
2.1 继承SpringBootServletInitializer
2.2 覆盖configure方法,写明本启动类
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(MybatisApplication.class);
}
3. 选中项目右击--->Showin--->Terminal
执行mvn clean清除target中的所有文件,然后执行mvn package,在target中会有打好的war包:
4.1 将该war包放在自己安装的tomcat的webapps目录下
4.2 启动tomcat,启动后,tomcat会自动解压所有没有解压的war包,并启动部署在该目录下的所有项目;
4.3 如果项目启动正常:
访问:localhost:8080/HelloMybatis-0.0.1-SNAPSHOT/[requestMapping对应的路径,如果有参数,则带入参数]
该路径要切记,端口号之后的不是properties中设置的context-path,而是打包后的项目名,即HelloMybatis-0.0.1-SNAPSHOT。这一点是网上很多人提问说war包部署后无法访问,一访问就是404错误的原因,很多人都是以为外部的tomcat版本和eclipse自带的tomcat不符导致的,或者其他的问题。
如果要使部署后的项目和本地项目访问的地址相同,就需要制定打包时的war名称,插件配置如下:
<build>
<finalName>mybatis</finalName> <!-- properties文件中server.servlet.context-path的值 -->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<maimClass>com.stu.MybatisApplication</maimClass>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
另外注意事项:
(1)对于文件的位置,必须制定明确,例如classpath,file等,在本地运行时,默认从classpath中寻找文件,但是在部署到外部tomcat后,不会有默认设置,即使是classpath下的文件,也必须写上classpath,否则会报错找不到文件。
(2)在启动类中,不要写controller层,部署到外部tomcat后,启动类中的requestMapping路径会报404错误。