ubuntu 18.04 server下tomcat部署sprongboot项目

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-jasperscope必须是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 修改启动类

外部容器部署的话,就不能依赖于Applicationmain函数了,而是要以类似于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 下载

网址:http://tomcat.apache.org/

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_HOMEtomcat的安装路径,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 部署项目

删除tomcatwebapps下的所有文件

rm -rf /usr/local/tomcat/webapps/*

将项目的war包上传到tomcatwebapps下,并且重命名为ROOT.war

启动tomcat,访问http://localhost

重启测试tomcat是否正常启动。

本文同步分享在 博客“吟风者”(JianShu)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

mysql设置时区

mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0