SpringBoot项目打war包发布云服务器,并保证同一个tomcat端口运行多个项目情况下定时任务不会重复启动全过程

本文档详细介绍了如何将一个SpringBoot应用配置为war包并部署到Tomcat服务器的过程,包括修改`application.properties`,配置启动类,调整pom.xml文件,打包,上传到云服务器,创建数据库,配置站点以及解决静态资源访问问题。通过这些步骤,确保了SpringBoot应用在外部Tomcat上的正常运行和访问。
摘要由CSDN通过智能技术生成

第一步:检查application.properties文件中启用生产环境的配置。

第二步:在项目启动入口文件中添加配置,此配置只有在打war包时需要配置,jar包不需要

public class LotPlatformApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        SpringApplication.run(LotPlatformApplication.class, args);
    }

    // 将项目打成war包时需要加此配置
    // 先将启动类继承自 SpringBootServletInitializer,然后重写configure方法,外部tomcat才能找到入口
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(LotPlatformApplication.class);
    }

}

第三步:配置pom文件,如下配置

  1. 先修改打包方式为war包形式,添加如下
    <!-- 下面的配置打包形式,war或jar包,springboot默认是jar包形式 -->
        <packaging>war</packaging>
  2. 移除内置tomcat,并添加javax.servlet-api
    <!-- 当项目打war包时添加下面两个依赖。将内置tomcat修改为外置,使用 provided;
             添加servlet-api依赖(因为项目中某些工具会用到时,如果缺失会报错,打jar包时将其移除-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
                <scope>provided</scope>
            </dependency>
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <scope>provided</scope>
            </dependency>
  3. 在<build>中添加资源路径,否则发布后可能访问不了
    <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
    
            <!-- 手动指定资源文件路径,否则找不到 -->
            <resources>
                <!-- 指定java路径下的xml文件为资源文件 -->
                <resource>
                    <directory>src/main/java</directory>
                    <includes>
                        <include>**/*.xml</include>
                    </includes>
                    <filtering>false</filtering>
                </resource>
                <!-- 下面这个指定resources下的,在本地时不指定可以正常运行,但是打包后发布,若没指定则访问不到,这里直接指定所有**/** -->
                <resource>
                    <directory>src/main/resources</directory>
                    <includes>
                        <include>**/**</include>
                    </includes>
                    <filtering>false</filtering>
                </resource>
            </resources>
        </build>

 第四步:前面全部配置好后,接下来点击进行打包生成,如下图:先点击红框中的按钮点亮除去   test代码的打包。接着点击clean,完成后再进行点击package即可完成打包,此时在target目录下有个.war的打包好的文件。

 第五步:到云服务器的tomcat目录下新建一个webapps2目录作为项目上传目录,并将webapps目录下的四个文件copy到webapps2中再将刚才打包好的war文件上传到webapps2目录下。然后继续在webapps目录下新建项目目录,目录名称可与项目名称相同,这里我新建lotplatform目录。将war手动解压到lotplatform目录中。此时项目文件已准备好了。

第六步:创建数据库,将本地的数据库文件导入到创建好的数据库中 。

第七步:创建站点,在创建站点前,域名的解析和端口的开放配置不赘述了,只需要在云服务器上安全组开放相应的端口即可,但是同时记住需要在防火墙中也开放相应的端口即可。

  1. 这里我使用的宝塔lunix面板管理的,点击网站栏目,选择PHP项目点击添加站点
  2. 填写域名和选择根目录(刚才解压的项目目录)即可,其它默认。
  3. 进行站点的默认首页设置,如下我的默认首页是login.html所以需要添加login.html
  4. 启用tomcat,勾选按钮即可,等待启用完成
  5. 启用完成后,在tomcat的conf文件下有个server.xml文件。我这里配置的同一个tomcat端口运行多个项目并保证定时任务只运行一次,所以默认生成的站点设置是不行的,需要改进才能做到同一个tomcat端口运行多个项目时保证定时任务不会重复执行。改进如下配置即可。若没有此需求可以无需修改。
    <Server port="8005" shutdown="SHUTDOWN">
      <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
      <Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener" />
      <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
      <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
      <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
      <GlobalNamingResources>
        <Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase" />
      </GlobalNamingResources>
      <Service name="Catalina">
        <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" />
        <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
        <Engine defaultHost="localhost" name="Catalina">
          <Realm className="org.apache.catalina.realm.LockOutRealm">
            <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase" />
          </Realm>
          <!--<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
            <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log" suffix=".txt" />
          </Host>-->
          <Host appBase="" autoDeploy="true" name="as.nani.cn" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false">
            <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log" suffix=".txt" />
            <Context crossContext="true" docBase="/www/server/tomcat/webapps/sdfr" path="" reloadable="true" />
          </Host>
          <Host appBase="" autoDeploy="true" name="sr.nani.cn" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false">
            <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log" suffix=".txt" />
            <Context crossContext="true" docBase="/www/server/tomcat/webapps1/remotede" path="" reloadable="true" />
          </Host>
          <Host appBase="" autoDeploy="true" name="aw.nani.cn" unpackWARs="true" xmlNamespaceAware="false" xmlValidation="false">
            <Context crossContext="true" docBase="/www/server/tomcat/webapps2/lotplatform" path="" reloadable="true" />
          </Host>
        </Engine>
      </Service>
    </Server>
  6. 修改完server.xml文件后,重启tomcat,此时项目可以通过域名访问了。但是会发现springboot的静态资源文件无法正常访问,我们需要继续在网站设置中进行设置,进入到网站的配置文件中进行nginx代理配置。

 在配置文件中添加如下代理配置,此时静态文件即可正常访问了

location ^~ /assets/
    {
        root /www/server/tomcat/webapps2/lotplatform/WEB-INF/classes/static/;
    }
    
    location ^~ /plugins/
    {
        root /www/server/tomcat/webapps2/lotplatform/WEB-INF/classes/static/;
    }

到此整个项目发布完成并可正常运行访问了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值