1 springboot
项目相关
1.1 修改pom.xml
文件依赖
如果要将最终的打包形式改为war
的话,还需要对pom.xml
文件进行修改,因为spring-boot-starter-web
中包含内嵌的tomcat
容器,所以直接部署在外部容器会冲突报错。这里有两种方法可以解决,如下
方法一:
在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>
在这里需要移除对嵌入式Tomcat
的依赖,这样打出的war
包中,在lib
目录下才不会包含Tomcat
相关的jar
包,否则将会出现启动错误。还有一个很关键的关键点,就是tomcat-embed-jasper
中scope
必须是provided
。
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>
方法二:
因为SpringBootServletInitializer
需要依赖javax.servlet
,而tomcat-embed-jasper
下面的tomcat-embed-core
中就有这个javax.servlet
,如果没用provided
,最终打好的war
里面会有servlet-api
这个jar
,这样就会跟tomcat
本身的冲突了。这个关键点同样适应于下面说的第二种方法。
<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>
provided
的作用上面已经介绍的很透彻了,这里就不啰嗦了,这种方式的好处是,打包的war
包同时适合java -jar
命令启动以及部署到外部容器中。
1.2 修改打包方式
<packaging>war</packaging>
1.3 修改启动类
外部容器部署的话,就不能依赖于Application
的main
函数了,而是要以类似于web.xml文件配置的方式来启动Spring应用上下文,此时我们需要在启动类中继承SpringBootServletInitializer
并实现configure
方法:
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
public class Chapter05Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Chapter05Application.class);
}
public static void main(String[] args) {
SpringApplication.run(Chapter05Application.class, args);
}
}
2 tomcat
相关
2.1 下载
2.2 解压安装
将安装包移动到你想要的位置,然后解压:
tar -zxvf apache-tomcat-8.5.34.tar.gz ./
重命名,这样后面的操作可以少打一点字。
mv apache-tomcat-8.5.34 tomcat
设置环境变量
vim /etc/profile
在文件末尾中加入:
#set tomcat environment
CATALINA_HOME=/usr/local/tomcat
export CATALINA_HOME
重新加载环境变量的配置文件:
source /etc/profile
进入tomcat
文件夹
cd /usr/local/tomcat
编辑catalina.sh
文件:
vim bin/catalina.sh
在文档前面加入:
CATALINA_HOME=/usr/local/tomcat
JAVA_HOME=/usr/local/java/jdk1.8.0_181
CATALINA_HOME
是tomcat
的安装路径,JAVA_HOME
是上面JDK的安装路径,把上面的路径改成你自己的安装路径即可。
2.3 启动tomcat
当前位置是/usr/local/tomcat
./bin/startup.sh
显示下面信息,表示启动成功:
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/java/jdk1.8.0_181
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
Tomcat started.
2.4 停止tomcat
./bin/shutdown.sh
2.5 检测tomcat
是否安装成功
浏览器访问http://localhost:8080/会显示tomcat的信息。
2.6 修改tomcat
端口
vim /usr/local/tomcat/conf/server.xml
找到8080端口的位置,将他修改为80。
2.7 将tomcat
设置为开机启动
复制catalina.sh
到/etc/init.d
目录下,并重命名为tomcat
cp /usr/local/tomcat/bin/catalina.sh /etc/init.d/tomcat
设置权限
chmod +x /etc/init.d/tomcat
在自启动文件夹下创建tomcat
的软(或硬)连接,K表示不自启动,S表示自启动。
ln -s /etc/init.d/tomcat /etc/rc2.d/S99tomcat
完成,重启测试即可。
3 部署项目
删除tomcat
的webapps
下的所有文件
rm -rf /usr/local/tomcat/webapps/*
将项目的war包上传到tomcat
的webapps
下,并且重命名为ROOT.war
启动tomcat,访问http://localhost。
重启测试tomcat是否正常启动。