利用在共有云上的时候是打成fatjar, 通过内嵌tomcat启动的. 在公有云上须要部署在一个过程中, 通过打成war包托管给tomcat启动.

1. 代码

首先, Application启动类须要继承SpringBootServletInitializer并重写configure办法, sources的入参为Application.class.

2. pom

<packaging>${project.packaging}</packaging><profiles>  <profile>    <id>jar</id>    <activation>      <activeByDefault>true</activeByDefault>    </activation>    <properties>      <project.packaging>jar</project.packaging>    </properties>  </profile>  <profile>    <id>war</id>    <build>      <plugins>        <plugin>          <groupId>org.apache.maven.plugins</groupId>          <artifactId>maven-war-plugin</artifactId>          <version>3.2.0</version>        </plugin>      </plugins>    </build>    <properties>      <project.packaging>war</project.packaging>    </properties>    <dependencies>      <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-web</artifactId>        <exclusions>          <exclusion>            <artifactId>spring-boot-starter-tomcat</artifactId>            <groupId>org.springframework.boot</groupId>          </exclusion>        </exclusions>      </dependency>      <dependency>        <groupId>javax.servlet</groupId>        <artifactId>javax.servlet-api</artifactId>        <version>3.1.0</version>        <scope>provided</scope>      </dependency>    </dependencies>  </profile></profiles>

在pom文件中通过profile管制打包行为, -Pwar时打成war包.

3. tomcat

tomcat10因为servlet被募捐后包名改成了jakarta, 须要升版本和批改依赖, 改变有点大, 因而抉择tomcat9, 或者tomcat8.

4. context

留神war包名字批改为了ROOT, 默认状况下, 如果不是ROOT, 那么url会带上该名字作为context进行路由, 例如本来的地址为http://127.0.0.1:8080/test, 会变成http://127.0.0.1:8080/app/test. 如果带上context, 一些动态资源因为是绝对路径会找不到, 一些filter门路匹配也须要批改, 改变较大, 因而去除context躲避这些问题. tomcat也反对通过批改conf/server.xml来去除context, 这里简略起见采纳了重命名为ROOT的形式.
如果利用没有提供http服务, 或者应用的是相对路径, 配置上也通过*进行门路匹配, 那么就不须要重命名.

5. 多端口

但一个端口内只有一个利用能够不带context, 如果多个利用都须要不带context, 那么就须要通过端口进行路由.
批改tomcat的conf/server.xml, 每个端口对应都增加一段如下配置, 留神name和appBase需不同, 这个配置port为8081

<Service name="Catalina1">    <Connector port="8081" protocol="HTTP/1.1"           connectionTimeout="20000"           redirectPort="8443" />    <Engine defaultHost="localhost" name="Catalina1">        <Host appBase="webapps1" autoDeploy="true" name="localhost" unpackWARs="true"/>    </Engine></Service>

6. tomcat启停

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

7. 其余

因为咱们的我的项目都自定义了日志打印, 所以能够去掉tomcat的日志打印, 批改/bin/catalina.sh, 把CATALINA_OUT指向/dev/null.

同样批改/bin/catalina.sh, 往JAVA_OPTS中增加skywalking所须要的agent等命令, 然而因为多个我的项目被集成在一个过程中, 只能有一个名字. 近程debug同理.

JAVA_OPTS="$JAVA_OPTS -javaagent:/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=app -Dskywalking.collector.backend_service=1127.0.0.1:11800"