1 springboot项目相关
1.1 修改pom.xml文件依赖
如果要将最终的打包形式改为war的话,还需要对pom.xml文件进行修改,因为spring-boot-starter-web中包含内嵌的tomcat容器,所以直接部署在外部容器会冲突报错。这里有两种方法可以解决,如下
方法一:
在web依赖中去除tomcat的依赖
1<dependency> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-web</artifactId> 4 <exclusions> 5 <exclusion> 6 <groupId>org.springframework.boot</groupId> 7 <artifactId>spring-boot-starter-tomcat</artifactId> 8 </exclusion> 9 </exclusions> 10</dependency>
在这里需要移除对嵌入式Tomcat的依赖,这样打出的war包中,在lib目录下才不会包含Tomcat相关的jar包,否则将会出现启动错误。还有一个很关键的关键点,就是tomcat-embed-jasper中scope必须是provided。
1<dependency> 2 <groupId>org.apache.tomcat.embed</groupId> 3 <artifactId>tomcat-embed-jasper</artifactId> 4 <scope>provided</scope> 5</dependency>
方法二:
因为SpringBootServletInitializer需要依赖javax.servlet,而tomcat-embed-jasper下面的tomcat-embed-core中就有这个javax.servlet,如果没用provided,最终打好的war里面会有servlet-api这个jar,这样就会跟tomcat本身的冲突了。这个关键点同样适应于下面说的第二种方法。
1<dependency> 2 <groupId>org.springframework.boot</groupId> 3 <artifactId>spring-boot-starter-tomcat</artifactId> 4 <scope>provided</scope> 5</dependency> 6<dependency> 7 <groupId>org.apache.tomcat.embed</groupId> 8 <artifactId>tomcat-embed-jasper</artifactId> 9 <scope>provided</scope> 10</dependency>
provided的作用上面已经介绍的很透彻了,这里就不啰嗦了,这种方式的好处是,打包的war包同时适合java -jar命令启动以及部署到外部容器中。
1.2 修改打包方式
<packaging>war</packaging>
1.3 修改启动类
外部容器部署的话,就不能依赖于Application的main函数了,而是要以类似于web.xml文件配置的方式来启动Spring应用上下文,此时我们需要在启动类中继承SpringBootServletInitializer并实现configure方法:
1import org.springframework.boot.SpringApplication; 2import org.springframework.boot.autoconfigure.SpringBootApplication; 3import org.springframework.boot.builder.SpringApplicationBuilder; 4import org.springframework.boot.web.support.SpringBootServletInitializer; 5 6@SpringBootApplication 7public class Chapter05Application extends SpringBootServletInitializer { 8 9 @Override 10 protected SpringApplicationBuilder configure(SpringApplicationBuilder application) { 11 return application.sources(Chapter05Application.class); 12 } 13 14 public static void main(String[] args) { 15 SpringApplication.run(Chapter05Application.class, args); 16 } 17}
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
在文件末尾中加入:
1#set tomcat environment 2CATALINA_HOME=/usr/local/tomcat 3export CATALINA_HOME
重新加载环境变量的配置文件:
source /etc/profile
进入tomcat文件夹
cd /usr/local/tomcat
编辑catalina.sh文件:
vim bin/catalina.sh
在文档前面加入:
1CATALINA_HOME=/usr/local/tomcat 2JAVA_HOME=/usr/local/java/jdk1.8.0_181
CATALINA_HOME是tomcat的安装路径,JAVA_HOME是上面JDK的安装路径,把上面的路径改成你自己的安装路径即可。
2.3 启动tomcat
当前位置是/usr/local/tomcat
./bin/startup.sh
显示下面信息,表示启动成功:
1Using CATALINA_BASE: /usr/local/tomcat 2Using CATALINA_HOME: /usr/local/tomcat 3Using CATALINA_TMPDIR: /usr/local/tomcat/temp 4Using JRE_HOME: /usr/local/java/jdk1.8.0_181 5Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar 6Tomcat 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是否正常启动。
本文同步分享在 博客“吟风者”(JianShu)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。