场景:现有一个项目微服务框架,其中包含一个注册中心: eureka-server.jar ,一个后台服务: xx-server.jar , 一个前段服务: xx-portal.jar
问题:一个前端找到我,说:他是做前端,他不想在他电脑运行源码(idea运行整个SpringCoud),而服务器上的前端启动的是一个Jar,他的H5页面修改完无法在服务上调试。我说,那你使用Fiddler可以本机调试呀, 但是她又说:PC端的可以,可是移动端的问题怎么使用Fiddler调试?我想了想,也是,于是就开始帮她将前端的SpringBoot服务修改成War+Tomcat部署了,这样她每次就可以直接上去替换Tomcat中静态页面就可以了。
第一步:修改pom.xml
1、修改打包方式为 war部署
<name>xx-portal</name>
2、移除内嵌Tomcat ,增加Servlet
<!-- 移除内嵌Tomcat -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.sprngframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
第二步:修改项目启动类
修改启动类继承 SpringBootServletInitializer , 然后重写 里面 configure方法 修改如下:
@EnableZuulProxy
@EnableEurekaClient
@SpringBootApplication
public class xxPortalApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(xxPortalApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(xxPortalApplication.class);
}
}
第三步:打包
使用Idea自带的Maven命令 ,先clear 再package:
到此,War做好了
第四步: 部署服务器
1、 部署Tomcat
其他服务不变:注册中心 eureka-server.jar ,后台服务: xx-server.jar部署的方式不变,然后停止该前端Jar。在当前同目录上传一个 Tomcat容器,然后将../tomcat/conf 目录下server.xml中tomcat 端口改为当前前端项目xx-portal.jar 服务的端口。
2、部署xx-portal.war
将 xx-portal.war 上传到 ../tomcat/webapps/目录下。这里需要注意:
1) 如果xx-portal.jar 中设置 server.servlet.context-path=xx ,那你的访问路径是 http://xxx.xxx.xxx:port/xx/index.html,这里你需要将你的项目名称改为 xx.war, tomcat启动成功后会生成一个名称为 xx 的文件夹,该文件夹里面就是你的项目。
2)如果xx-portal.jar 没有设置 server.servlet.context-path,那你的访问路径是 http://xxx.xxx.xxx:port/index.html , 是没有项目根路径的,这时你需要 将webapps下面的 ROOT文件夹删除,将你的 xx-portal.war 改为 ROOT.war,tomcat启动成功会重新生成一个 ROOT文件夹,里面就是你的项目。
到此,Jar改为War部署就完成了,Tomcat启动成功后,直接在浏览器中访问地址就可以了。可以很自豪的给同事说:部署好了,你直接替换 ../tomcat/webapps 目录下项目文件就可以。