将Java项目发布到Tomcat服务器上面的方法【20211120】

发表于 2020-11-04 18:30:26
阅读 44

介绍

介绍

我们学习一下如何将我们的Java项目发布到Tomcat服务器上面。

管理

配置

manager是用来管理tomcat的GUI工具,默认部署在 webapps 下面

如果我们的项目不是在 webapps 下面,我们可以复制 webapps/manager 目录到自己的 Host.appBase 目录下面

服务配置

打开 conf/server.xml 文件,在 Server 节点增加 Service 节点

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

用户配置

打开 conf/tomcat-users.xml 文件,在 tomcat-users 节点下面增加用户设置

<role rolename="manager-gui"/>
  <user username="admin" password="123456" roles="manager-gui"/>

重启Tomcat

./bin/shutdown.sh
./bin/startup.sh

授权IP地址

默认 manager 只能通过 localhost 访问,如果需要其他 IP 页可以访问,则需要进行如下配置
打开 webapps/manager/META-INF/context.xml 文件,修改 <Value ... RemoteAddrValue ... />
增加自己的 IP 地址,我们这里设置的是 192.168.1.133

<Context antiResourceLocking="false" privileged="true" >
  <Valve className="org.apache.catalina.valves.RemoteAddrValve"
         allow="127\.0\.0\.1|192\.168\.1\.133|::1|0:0:0:0:0:0:0:1" />
  <Manager sessionAttributeValueClassNameFilter="java\.lang\.(?:Boolean|Integer|Long|Number|String)|org\.apache\.catalina\.filters\.CsrfPreventionFilter\$LruCache(?:\$1)?|java\.util\.(?:Linked)?HashMap"/>
</Context>

测试

通过 curl 测试 manager 首页

curl --basic -u admin:123456 'http://localhost:8088/manager/html'

看到界面表示安装成功!!!

打包

通过 Maven 打包 war

我们使用 Maven 工具将项目打包成 war 文件,方便 tomcat 使用

准备

打开 pom.xml
在 project 里增加

<packaging>war</packaging>

在 dependencies 里增加

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>

打包

切换到项目跟目录
通过 mvn 打包 war

mvn clean package -Dmaven.test.skip=true
  • maven.test.skip=true:表示在打包的时候跳过测试项目

因为大多数打包的环境是不能连接数据库之类的外部资源的,如果不加这一句,打包将会因为无法连接数据库而失败

部署

手动部署war

我们通过 maven 打包的 war 压缩包可以被 tomcat 解析来使用

配置

打开配置文件 conf/server.xml,在虚拟主机 <Host> 里增加设置

<Context path="/" docBase="/data/web/myweb" debug="0" privileged="true">
</Context>

解压缩war

使用 unzip 解压缩 war 文件到指定目录

unzip -o myweb.war -d /data/web/myweb/

重启tomcat

重新启动tomcat

./bin/shutdown.sh
./bin/startup.sh

打开浏览器测试程序!

自动部署war

我们利用 tomcat 的 Host 主机进行自动解压缩 war 文件来完成自动部署

配置

打开配置文件 conf/server.xml,给虚拟主机 <Host> 增加属性

unpackWARs="true"
autoDeploy="true"
  • unpackWARs="true":表示允许自动解压缩 war 文件

  • autoDeploy="true":表示开启自动部署功能

更新war

将打包好的 war 文件放到 <Host> 的  appBase 指定的目录下面,默认是 webapps 目录

重启tomcat

重新启动tomcat

./bin/shutdown.sh
./bin/startup.sh

打开浏览器测试程序!

FAQ

项目发布完记得删除war文件

如果appBase下面有war文件,即使没有开启unpackWARs,没有开启autoDeploy,tomcat还是会去等待,所以用完记得要删除哦~~

ROOT目录是可以删除的

通过war文件自动部署完项目之后会发现,在同级目录下面有个ROOT目录,这个目录是可以删除掉的

Tomcat启动速度瓶颈在CPU上

tomcat启动慢和内存关系不大,主要cpu才是瓶颈,所以笔记本电脑开发尽量提供IDE的模式调试

项目更新后必须重启Tomcat

项目更新了,必须重启tomcat才能生效,因为java是整体运行思路的语音,和脚本语音不一样,任何一个改动都需要重新来过