springboot war包部署过程详解
作者:outwar
正文
应用在共有云上的时候是打成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"
以上就是springboot war包部署过程详解的详细内容,更多关于springboot war包部署的资料请关注脚本之家其它相关文章!
