前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >SpringBoot项目部署详细步骤(jar包+war包+Tomcat下部署多个war包)

SpringBoot项目部署详细步骤(jar包+war包+Tomcat下部署多个war包)

作者头像
bboy枫亭
发布于 2021-12-07 07:31:39
发布于 2021-12-07 07:31:39
4K00
代码可运行
举报
文章被收录于专栏:csdn_blogcsdn_blog
运行总次数:0
代码可运行

文章目录

1. 打成 jar 包

简单一步

直接使用IDEA的快捷方式>>install即可

这样就出来了两个包,我们只要.jar的即可

那么.jar.original是什么?

该解释参考blog https://blog.csdn.net/wupan6688/article/details/103629664

官方文档给的解释: https://docs.spring.io/spring-boot/docs/current/reference/html/getting-started.html#getting-started-first-application

谷歌翻译: 您还应该在target目录中看到一个更小的文件myproject-0.0.1-SNAPSHOT.jar.original。这是Maven在Spring Boot重新打包之前创建的原始jar文件 。 (只包含少量用户的类,不包含依赖)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
.jar.original 是普通jar包,不包含依赖
.jar 是可执行jar包,包含了pom中的所有依赖,可以直接用java -jar 命令执行
如果是部署,就用.jar
如果是给别的项目用,就要给.jar.original这个包

2. 打成 war 包

参考blog:https://www.cnblogs.com/vipstone/p/9540325.html

这里的部署环境已经准备好了JDK8+Tomcat9的环境

2.1 入口类继承SpringBootServletInitializer重写configure方法

如果要进行生产环境部署,需要单独配置一下Spring Boot 的入口类,需要继承SpringBootServletInitializer类,重写configure方法,因为默认情况外部Tomcat不能读取到Spring Boot 入口类的main方法启动程序加载,使用需要继承,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package com.onemsg.hncj;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
/**
 * 启动类,程序入口
 */
@SpringBootApplication
public class DemoApplication extends SpringBootServletInitializer{
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

    /**
     * 重写configure方法,加载启动类
     * @param application
     * @return
     */
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(DemoApplication.class);
    }
}

2.2 配置pom.xml文件

(1)先让IDEA知道你这次要配war包

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
	<packaging>war</packaging>

(2) 需要排除一下内置tomcat的jar包,防止打包之后与外面Tomcat jar 包冲突,导致项目启动失败,配置如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!--排除内置tomcat jar包-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>

(3) 修改生成文件的文件名称,可以设置build下的finalName属性,代码如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<build>
    <finalName>hncj-data-visualization</finalName>
</build> 

2.3 IDEA生成war包

(1)Build>>Build Artifacts

(2)选中war>>Build

出现下面就OK

2.4 部署环境配置tomcat运行项目

(1)把war文件复制到tomcat的webapps目录下

(2)配置conf/server.xml

在Host标签内添加Context设置,docBase属性填写war文件名称,配置如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">    
    <Context path="" docBase="hncj-data-visualization" debug="0" privileged="true" reloadable="true" />
    <!--
    其他代码
    -->
</Host>

(3)启动Tomcat

Tomcat安装目录>>bin/startup.bat

浏览器输入localhost:8080/hncj-data-visualization(刚刚配的项目名)

到此jar包和war包都都打好了

2.5 配置Tomcat开机自启动(非必须,根据自己情况)

(1)进入tomcat安装目录/bin中,找到service.bat批处理文件

(2)打开cmd命令窗口,将service.bat文件拖动到cmd命令窗口中,接着输入空格 install tomcat9回车,进行服务安装。

(3)安装完成后,在windows服务中进行查看是否安装成功,也可以通过命令查看。

自启动的开启可以通过服务管理界面用鼠标完成,也可以用命令行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
启动服务:net start 服务名

停止服务:net stop 服务名

服务自启:sc config 服务名 start=auto

禁用服务:sc config 服务名 start=disabled

3. Tomcat同时部署多个war包

注:鄙人不是运维相关专业技术人员,大佬勿喷,仅提供基本的学习和使用,欢迎指出不足

网上有很多种方法,很遗憾,在我这儿都不好用,总是出现冲突问题(可能是版本等一系列问题,不是这方面的技术人员,我也不太懂底层的原理,不过最终还是成功了),我这里依然还是Tomcat9+Jdk8的环境

开发环境和我一样的朋友可以参考blog最后的server.xml文件进行大致的部署(这里是两个war包)

我这里为了减少出错,直接一个项目一个端口

原来的server.xml默认给了一个Service(端口是8080,包存放位置是webapps),上面介绍war包部署的时候就是用的这个,我直接复制两份Service粘贴到了下面,下面说一下部署到localhost需要注意的配置

  1. service_name我没改,还是用的Catalina,为了区分开,最好改一下,例如Catalina1和Catalina2
  1. 接下来我以其中一个为例讲一哈

(1)port。端口号修改,我这里第一个项目修改为8083 (2)host-name。默认是localhost,需要部署到外网的话需要修改,这里先不动 (3)host-appBase。默认是webapps,我这里为了区分开就另外新建项目文件夹叫hncjrygj

(4)Context。和上面介绍war包部署的时候一样,配置一下docBase(war包名)就可以了

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <Service name="Catalina">
      
      <!-- 1.端口号。我这里修改为8083 -->
    <Connector port="8083" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>
        <!-- 2.host-name。默认是localhost,需要部署到外网的话需要修改,这里先不动 -->
        <!-- 3.host-appBase。默认是webapps,我这里为了区分开就另外新建项目文件夹叫hncjrygj -->
      <Host name="localhost"  appBase="hncjrygj"
            unpackWARs="true" autoDeploy="true">
        <!-- 4.Context。配置一下docBase(war包名)就可以了 -->
    <Context path="" docBase="hncj-data-visualization-rygj" debug="0" privileged="true" reloadable="true" />
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
    </Engine>
  </Service>
  1. 接下来相信应该就可以比葫芦画瓢,想同时部署几个就部署几个了吧。。。
  2. 最后附上我的server.xml文件(仅供参考,请根据实际需求进行配置)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
  <GlobalNamingResources>
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />
  </GlobalNamingResources>

  <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
    </Engine>
  </Service>
    
  <Service name="Catalina">
    <Connector port="8084" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>
        
      <Host name="localhost"  appBase="hncjmqjc"
            unpackWARs="true" autoDeploy="true">
    <Context path="" docBase="hncj-data-visualization-mqjc" debug="0" privileged="true" reloadable="true" />

        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
    </Engine>
  </Service>
    
  <Service name="Catalina">
    <Connector port="8083" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Engine name="Catalina" defaultHost="localhost">
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>
        
      <Host name="localhost"  appBase="hncjrygj"
            unpackWARs="true" autoDeploy="true">
    <Context path="" docBase="hncj-data-visualization-rygj" debug="0" privileged="true" reloadable="true" />
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
    </Engine>
  </Service>
</Server>

我这里配的是localhost,远程部署到学校数据中心的话修改一下对应的host就可以了

4. 警告 [main] org.apache.catalina.webresources.Cache.getResource 无法将位于[/WEB-INF/classes/static/layui/images/face/25.gif]的资源添加到Web应用程序[]的缓存中,因为在清除过期缓存条目后可用空间仍不足 - 请考虑增加缓存的最大空间。

部署的时候如果出现此错误

只用在../conf/context.xml里加一行

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<Resources cachingAllowed="true" cacheMaxSize="1000000" />

即可

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/10/06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
tomcat部署war包访问显示404
在eclipse导出的maven项目war包,放到tomcat下启动,顺利启动且无报错,但是浏览器访问该项目时显示404
全栈程序员站长
2022/06/28
2.6K0
tomcat部署war包访问显示404
web项目部署,需要的来看
原本服务器上tomcat部署了一个javaweb项目在80端口,这次要部署另一个javaweb项目在8090端口,或者同时部署在同一端口不同目录下。
天道Vax的时间宝藏
2021/08/11
5910
tomcat整体架构
上面简单列了tomcat的模块结构,下面结合配置文件更加具体一点来分析,当然更多是集中在Connector和Container两个组件上,毕竟这是两个核心组件,后续的内容也会更多集中在这两个组件上面
东营浪人
2019/09/05
6420
tomcat整体架构
Tomcat配置通过域名直接访问项目首页的完整步骤
我们以tomcat为例通过输入域名直接访问项目首页的配置方法。我的域名为:www.nnjskz.cn,也欢迎大家访问。
Jensen_97
2023/07/20
2.1K0
一个Tomcat 如何部署多个项目?附多种解决方案及详细步骤!
此文源自一次多年前面试的面试题,民工哥将它总结出来分享给大家,希望对大家有所帮助,或者今后的面试中说不定会用的上。
民工哥
2020/09/15
2.4K0
一个Tomcat 如何部署多个项目?附多种解决方案及详细步骤!
DevOps: Tomcat 配置多个端口号或多个应用
即一个service配置多个端口,项目可以通过多个端口访问。修改tomcat-home\conf下的server.xml,在Service下配置多个即可。
Freedom123
2024/03/29
3410
tomcat相关配置技巧梳理
tomcat常用架构: 1)nginx+tomcat;即前端放一台nginx,然后通过nginx反向代理到tomcat端口(可参考:分享一例测试环境下nginx+tomcat的视频业务部署记录) 2)tomcat直接部署站点,不通过nginx反向代理。 下面针对tomcat的有关配置使用进行说明: 1)默认站点根目录 tomcat的默认站点根目录是webapps/ROOT,配置文件是server.xml, 配置文件server.xml 里的主要内容是: [root@huanqiu-test ~]# vim
洗尽了浮华
2018/01/23
1.2K0
Tomcat虚拟主机
<% out.println(“Welcome to test site,http://www.对应域名.com”);%> “`
全栈程序员站长
2022/09/06
13.9K0
面试官:tomcat是如何处理http请求的?
因为tomcat实现了Servlet规范,所以我们得掌握什么是Servlet?什么是Servlet规范? 什么是Servlet呢? Servlet是JavaEE规范的一种,主要是为了扩展Java作为W
田维常
2021/01/28
9130
腾讯云服务器上tomcat配置文件参数详解
<Connector port="8080" protocol="HTTP/1.1"
用户8639654
2021/08/04
5.9K0
Web基础配置篇(三): tomcat的配置及使用
tomcat,大家应该都知道是啥,servlet的Web容器而已,遵守servlet规范的JavaEE服务器。我们通常用tomcat来部署war包来做应用服务器。
品茗IT
2019/09/11
5610
tomcat部署war包,jar包
网上说的方法很多,这里记录一下自己的经过实践检验的一种方法。 1、先去tomcat/conf/server.xml里 有一个HOST标签,有个参数appBase,表示你的应用应该部署在什么位置。例如下面写的是webapps,那就在webapps/ROOT/路径下解压你的war包。如果appBase=XXX,那么就在XXX/ROOT/路径下解压war包
全栈程序员站长
2022/09/05
3.9K0
隐藏 Tomcat 版本信息
访问 Tomcat 发布的应用中不存在的页面或 URL 中包含特殊字符时,会看到下面这样的界面:
AlphaHinex
2024/04/09
5610
隐藏 Tomcat 版本信息
SpringBoot在Tomcat部署war包[通俗易懂]
Host节点增加Context可以直接通过ip+端口方式访问,需要将appBase清除,防止启动两次应用
全栈程序员站长
2022/07/01
9560
windows服务器使用Tomcat发布Springboot的war包项目
(1)Tomcat 8.x 下载地址:https://tomcat.apache.org/download-80.cgi
Mr.Vv
2022/05/11
1.5K0
windows服务器使用Tomcat发布Springboot的war包项目
Docker下dubbo开发,三部曲之二:本地环境搭建
程序员欣宸
2018/01/04
1.5K0
Docker下dubbo开发,三部曲之二:本地环境搭建
Springboot部署war项目文件到Tomcat静态文件(css、js和图片等)加载不出来的解决方法
(2)/elec/WEB-INF/classes/static/:项目实际war包解决后,静态文件地址
Mr.Vv
2022/05/11
2.6K0
Springboot部署war项目文件到Tomcat静态文件(css、js和图片等)加载不出来的解决方法
Apache Tomcat服务部署网站
Tomcat是Apache软件基金会的Jakarta项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成.由于有了Sun的参与和支持,最新的Servlet和JSP规范总是能在Tomcat中得到体现,因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web应用服务器.
王瑞MVP
2022/12/28
6680
Tomcat部署WAR包访问不带项目名的方式
2、在Tomcat的安装目录的conf下找到server.xml的文件,如:D:\apache-tomcat-9.0.8\conf\server.xml
全栈程序员站长
2022/08/29
1.6K0
Linux下Tomcat使用详解
版权声明:本文为木偶人shaon原创文章,转载请注明原文地址,非常感谢。 https://blog.csdn.net/wh211212/article/details/53198350
shaonbean
2019/05/26
2K0
相关推荐
tomcat部署war包访问显示404
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验