文章目录
- 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应用程序[]的缓存中,因为在清除过期缓存条目后可用空间仍不足 - 请考虑增加缓存的最大空间。
1. 打成 jar 包
简单一步
直接使用IDEA的快捷方式>>install即可
这样就出来了两个包,我们只要.jar的即可
那么.jar.original是什么?
该解释参考blog
谷歌翻译: 您还应该在target
目录中看到一个更小的文件myproject-0.0.1-SNAPSHOT.jar.original
。这是Maven在Spring Boot重新打包之前创建的原始jar文件 。 (只包含少量用户的类,不包含依赖)
.jar.original 是普通jar包,不包含依赖
.jar 是可执行jar包,包含了pom中的所有依赖,可以直接用java -jar 命令执行
如果是部署,就用.jar
如果是给别的项目用,就要给.jar.original这个包
2. 打成 war 包
参考blog:
这里的部署环境已经准备好了JDK8+Tomcat9的环境
2.1 入口类继承SpringBootServletInitializer重写configure方法
如果要进行生产环境部署,需要单独配置一下Spring Boot 的入口类,需要继承SpringBootServletInitializer类,重写configure方法,因为默认情况外部Tomcat不能读取到Spring Boot 入口类的main方法启动程序加载,使用需要继承,代码如下:
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包
<packaging>war</packaging>
(2) 需要排除一下内置tomcat的jar包,防止打包之后与外面Tomcat jar 包冲突,导致项目启动失败,配置如下
<!--排除内置tomcat jar包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
(3) 修改生成文件的文件名称,可以设置build下的finalName属性,代码如下
<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文件名称,配置如下:
<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服务中进行查看是否安装成功,也可以通过命令查看。
自启动的开启可以通过服务管理界面用鼠标完成,也可以用命令行
启动服务: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需要注意的配置
- service_name我没改,还是用的Catalina,为了区分开,最好改一下,例如Catalina1和Catalina2
- 接下来我以其中一个为例讲一哈
(1)port。端口号修改,我这里第一个项目修改为8083
(2)host-name。默认是localhost,需要部署到外网的话需要修改,这里先不动
(3)host-appBase。默认是webapps,我这里为了区分开就另外新建项目文件夹叫hncjrygj
(4)Context。和上面介绍war包部署的时候一样,配置一下docBase(war包名)就可以了
<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 "%r" %s %b" />
</Host>
</Engine>
</Service>
- 接下来相信应该就可以比葫芦画瓢,想同时部署几个就部署几个了吧。。。
- 最后附上我的server.xml文件(仅供参考,请根据实际需求进行配置)
<?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 "%r" %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 "%r" %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 "%r" %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
里加一行
<Resources cachingAllowed="true" cacheMaxSize="1000000" />
即可