Skip to content

Tomcat部署WAR包

打war包

idea 生成项目web.xml文件

  • 打开项目结构

11.1.项目结构

  • 生成web.xml文件

注意路径要一致

生成web.xml文件

代码改造

  • 启动项Application类
java
// 增加继承SpringBootServletInitializer
public class GisBootApplication extends SpringBootServletInitializer {
    public static void main(String[] args) throws UnknownHostException {
        //......
    }
    // 重载 configure
    @Override 
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(GisBootApplication.class);
    }
}

11.3.启动项类改造

  • 启动项pom.xml
xml
  设置打包为war
 <packaging>war</packaging>

11.4.启动项pom.xml配置

其它框架注意事项

新框架的pom.xml 需要注释掉layout,否则加密无效,且打包重复

xml
<!--  <layout>ZIP</layout>-->

11.6.新框架注释layout

文件日志地址,需要设置,否则多个服务会相互覆盖,且地址不是相对地址

xml
<configuration>
	<!-- 生成到tomcat/bin 的 /logs/api1下-->
	<property name="LOG_HOME" value="logs/api1" />
     <!-- 生成到当前磁盘 的 logs/api1下-->
     <property name="LOG_HOME" value="/logs/api1" />
     <!-- 生成到tomcat 的 logs/api1下 -->
     <property name="LOG_HOME" value="/testTomcat/apache-tomcat-9.0.91/logs/api1" />
     <!-- 推荐这个,和现有的接近。生成到tomcat 下 项目路径 的logs目录下 -->
     <property name="LOG_HOME" value="/testTomcat/apache-tomcat-9.0.91/webapps/api1/logs" />
</configuration>

11.7.日志文件生成路径.png

其它工作目录

相对路径读取的是tomcat下的bin文件夹,相关资源要放到bin下

11.8.其它相对路径.png

Tomcat 部署·war

安装部署tomcat

下载后解压即可,其它前置jdk环境需要先安装

下载地址

war部署准备

将对应的war包放置到webapps下的项目路径

11.10.war部署

配置conf/server.xml

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="8088" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxParameterCount="1000" />
          <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/api1" unpackWARs="true" autoDeploy="true">
                    <!-- 设置默认项目 -->
                    <Context path="" docBase="/ROOT.war" workDir="/webapps/api1/public" reloadable="true"/>
                    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs/api1" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" />
               </Host>
          </Engine>
     </Service>
     <Service name="Catalina1">
          <Connector port="8089" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxParameterCount="1000" />
          <Engine name="Catalina1" defaultHost="localhost">
               <Realm className="org.apache.catalina.realm.LockOutRealm">
                    <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
               </Realm>
               <Host name="localhost" appBase="webapps/api2" unpackWARs="true" autoDeploy="true">
                    <!-- 设置默认项目 -->
                    <Context path="" docBase="/ROOT.war" workDir="/webapps/api2/public" reloadable="true"/>
                    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs/api2" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t &quot;%r&quot; %s %b" />
               </Host>
          </Engine>
     </Service>
</Server>

运行/关闭

bin路径执行cmd

  • window:

运行 startup.bat

关闭 shutdown.bat

  • linux

运行 startup.sh

关闭 shutdown.sh

运行包加密

需要所有都加密 加密后无法注册到服务启动,只能通过startup启动

  • 把classfinal-fatjar-1.2.1.jar包复制到tomcat/bin 路径下
  • 修改catalina.bat 和catalina.sh

window 下修改catalina.bat,增加以下语句

xml
set JAVA_OPTS="-javaagent:classfinal-fatjar-1.2.1.jar='-nopwd'"

11.17.window加密修改.png

linux 下修改catalina.sh,增加以下语句

xml
CATALINA_OPTS="$CATALINA_OPTS -javaagent:classfinal-fatjar-1.2.1.jar='-nopwd'";
export CATALINA_OPTS;

11.16.linux加密修改.png

执行窗口

11.18.加密运行.png

注册到service

service.bat install xxxx(服务名)

11.19.服务注册.png

风险点

  • jar改war部署,程序的改造(微量)
  • 路径问题(相对路径、日志路径等的改造),jar相对路径为jar路径,tomcat为bin文件夹;【使用文件服务器部分的没影响】
  • 安全问题(传统tomcat部署的安全问题)
  • 统一启停问题(慢)
  • 服务卡死问题(并发量卡顿的问题)
  • 一个服务的失败,会影响其它服务的启动

Jar 转 War(未用到)

1、maven 打包jar

2、在jar命令下cmd 执行 jar cvf xxx.war xxx.jar