ubuntu 18.04 server下tomcat部署sprongboot项目

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

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

网址: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

在文件末尾中加入:

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

删除tomcatwebapps下的所有文件

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

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

启动tomcat,访问http://localhost。

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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏实战docker

极速体验SpringCloud Gateway

Spring Cloud Gateway是Spring Cloud技术栈中的网关服务,本文实战构建一个SpringCloud环境,并开发一个SpringClou...

14100
来自专栏玩转JavaEE

分布式数据库如何实现主键全局自增?

前面和大家介绍了 MyCat 中数据库不同的分片规则,从留言中看出大家对分布式数据库中间件还挺感兴趣,因此今天就再来一篇,聊一聊主键全局自增要如何实现。

20610
来自专栏分布式爬虫

15、web爬虫讲解2—urllib库中使用xpath表达式—BeautifulSoup基础

在urllib中,我们一样可以使用xpath表达式进行信息提取,此时,你需要首先安装lxml模块,然后将网页数据通过lxml下的etree转化为treedata...

10820
来自专栏微信公众号:Java团长

品Spring:帝国的基石

生活是一杯酒,有时需要麻醉自己,才能够暂时忘却痛苦与不快。 生活是一杯茶,有时需要细细品味,才发现苦涩背后也会有甘甜。 Spring是一杯酒,一眼望不到边的官...

15100
来自专栏技术探究-前端、Python、爬虫、数据分析、工具

爬虫系列(2)爬虫需要使用什么工具,你知道吗?

7510
来自专栏玩转JavaEE

分布式数据库中间件 MyCat 搞起来!

前面文章我们提到,如果数据量比较大的话,我们需要对数据进行分库分表,分完之后,原本存在一个数据库中的数据,现在就存在多个数据库中了,就像下面这样:

10820
来自专栏java 微风

@JsonFormat Date类型时间 格式化 注解 使用

@JsonFormat注解是一个时间格式化注解,比如我们存储在mysql中的数据是date类型的,当我们读取出来封装在实体类中的时候,就会变成英文时间格式,而不...

38600
来自专栏小小挖掘机

数据分析EPHS(3)-来试试Hive的可视化吧~

这里需要使用hive中的HiveServer2服务,使用该服务相当于在hive的机器上启动一个server,而客户端可以通过ip + port的方式对其进行访问...

9020
来自专栏我的社区

$.Ajax、$.Get、$.Post代码实例参数解析

46210
来自专栏AI人工智能

知识图谱里中的RDF

大部分知识图谱使用RDF描述世界上的各种资源,并以三元组的形式保存到知识库中。 RDF( Resource Description Framework, 资源描...

27500

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励