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

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

作者头像
bboy枫亭
发布2021-12-07 15:31:39
3.6K0
发布2021-12-07 15:31:39
举报
文章被收录于专栏:csdn_blog

文章目录

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
复制
.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
复制
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
复制
	<packaging>war</packaging>

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

代码语言:javascript
复制
<!--排除内置tomcat jar包-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>

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

代码语言:javascript
复制
<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
复制
<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
复制
启动服务: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
复制
  <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
复制
<?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
复制
<Resources cachingAllowed="true" cacheMaxSize="1000000" />

即可

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
  • 1. 打成 jar 包
  • 2. 打成 war 包
    • 2.1 入口类继承SpringBootServletInitializer重写configure方法
      • 2.2 配置pom.xml文件
        • 2.3 IDEA生成war包
          • 2.4 部署环境配置tomcat运行项目
            • 2.5 配置Tomcat开机自启动(非必须,根据自己情况)
            • 3. Tomcat同时部署多个war包
            • 4. 警告 [main] org.apache.catalina.webresources.Cache.getResource 无法将位于[/WEB-INF/classes/static/layui/images/face/25.gif]的资源添加到Web应用程序[]的缓存中,因为在清除过期缓存条目后可用空间仍不足 - 请考虑增加缓存的最大空间。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档