因为项目信创改造需要将SpringBoot的独立Jar应用改为WAR包,在部署TongWeb前需要先改造为WAR包部署Tomcat先进行测试,如果正常运行则部署到TongWeb。
(1)首选注意JDK版本,项目使用的JDK和Tomcat使用的JDK版本要一致,目前项目使用的JDK21,Tomcat9使用的JDK版本也要一致。
(2)使用Tomcat9进行测试,目前使用的D:\apache-tomcat-9.0.120。
(3)目前SpringBoot是一个主项目多个子项目,主项目openjweb-clouds,子项目openjweb-core和openjweb-sys,其中openjweb-sys依赖openjweb-core 且主应用是openjweb-sys。
(4)OpenJWeb-Sys的改造,先改造启动应用 OpenJwebSysApplication,jar模式的启动类是这么写的(忽略注解):
public class OpenjwebSysApplication {
public static void main(String[] args) {
SpringApplication.run(OpenjwebSysApplication.class, args);
}
}
WAR模式:
public class OpenjwebSysApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// 注意:这里传入的是当前类,而不是 .sources(CloudsApplication.class) 的某种写法
return builder.sources(OpenjwebSysApplication.class);
}
public static void main(String[] args) {
SpringApplication.run(OpenjwebSysApplication.class, args);
}
}
(5)openjweb-sys的pom.xml增加:
<packaging>war</packaging>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>org.openjweb.sys.OpenjwebSysApplication</mainClass>
</configuration>
</plugin>
增加了
<configuration> <mainClass>org.openjweb.sys.OpenjwebSysApplication</mainClass> </configuration>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<!-- WAR 模式增加exclusions-->
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
另外WAR 模式增加:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
另外openjweb-core工程的pom.xml主要修改一个点:
<dependency>
<groupId>org.apache.tomcat.embed</groupId>
<artifactId>tomcat-embed-core</artifactId>
<!-- WAR模式增加scope -->
<scope>provided</scope>
</dependency>
然后这样整个编译生成openjweb-sys的WAR包后丢到tomcat9的D:\apache-tomcat-9.0.120\webapps目录就行,如果以前增加了nginx的反向代理路径是clouds,则这里可以把WAR改名为clouds.war(建议先改war名然后部署过去)。
nginx的clouds反向代理的配置参考:
location /clouds/
{
#proxy_set_header X-Forwarded-Scheme $scheme;
proxy_set_header X-Forwarded-Proto $scheme;
#add_header 'Access-Control-Allow-Headers' 'X-Requested-With';
#add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS';
proxy_pass http://localhost:8080/clouds/ ;
#proxy_set_header Content-Type $content_type;
proxy_set_header Host host:server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
proxy_connect_timeout 300;
proxy_read_timeout 600;
proxy_send_timeout 600;
proxy_buffer_size 256k;
proxy_buffers 8 512k;
proxy_busy_buffers_size 512k;
proxy_temp_file_write_size 512k;
#test resolve 502 end
location ~ ^/portal/pubinfo/0-20-50-90-9/0-10-9/0-30-9/500\S*.html\S*$
{
deny all;
}
}
然后启动应用,检查原来的JAR模式运行的应用可以正常使用。
关键补充!!!!:
实测在Tomcat9部署成功的WAR放到TongWeb上部署失败,做下处理:
在openjweb-sys的src/main下创建webapp/WEB-INF目录,在此目录下创建一个web.xml,内容:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">
<!-- metadata-complete="true" 告诉容器不扫描注解,所有配置都在XML里 -->
<!-- 如果您的Spring Boot项目没有web.xml,需要创建这个文件 -->
</web-app>
重新编译打包WAR再次部署就可以部署成功!