当前位置: 首页 > 科技观察

解决99%的SpringBoot多模块发布问题

时间:2023-03-23 11:06:46 科技观察

如果你在使用SpringBoot多模块项目,在发布的时候可能会遇到各种各样的问题。本文总结了以下8条原则和解决发布过程中经常出现的4个问题。掌握这些原理和解决方法几乎可以解决大部分的SpringBoot发布问题。SpringBoot多模块发布的8个原则1.打包发布模块而不是父模块。比如下面的项目目录:如果要发布api,直接打包到它的模块上,而不是父模块上。2.公共调用模块,打包类型设置为jar格式公共模块,如common和model需要设置打包为jar格式,在pom.xml中配置:jar3.发布模块打包类型为settowarformat发布模块pom.xml中设置:war4.排除内置tomcat发布模块pom.xml中设置:org.springframework.bootspring-boot-starter-tomcatprovided当设置scope=provided时,该jar包不会出现在发布的项目中,从而排除内置tomcat。5.设置启动类这一步相当于告诉tomcat启动入口在哪里。启动类中需要添加如下代码:@SpringBootApplicationpublicclassApiApplicationextendsSpringBootServletInitializer{@OverrideprotectedSpringApplicationBuilderconfigure(SpringApplicationBuilderapplication){returnapplication.sources(ApiApplication.class);}publicstaticvoidmain(String[]args){SpringApplication.run(ApiApplication.class}6.args)如果在使用拦截器时必须排除静态文件。比如我项目中使用了swagger,那么我需要排除swagger的静态文件。代码如下:@ConfigurationpublicclassWebMvcConfigextendsWebMvcConfigurationSupport{@OverrideprotectedvoidaddResourceHandlers(ResourceHandlerRegistryregistry){//排除静态文件registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");registry。addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");}//dosomething}7.先加载公共模块,然后发布项目。如果发布的模块引用了本项目的其他公共模块,需要先将本项目的公共模块加载到本地仓库。操作方法是双击安装父模块。安装成功后,点击release模块的package生成war包,项目打包完成,如下图:8.部署项目有了war包后,只需要打一个单独的War包,放到tomcat的webapps目录下,重启tomcat,如下图:项目正常运行会在webapps目录下生成一个同名文件夹,如下图:完成以上配置后,你也可以愉快的访问自己发布的项目了。可能出现的问题及解决方案问题一:SpringBoot配置的端口号会不会影响程序发布?答:不会,配置的server.port会被覆盖,以tomcat本身的端口号为准,tomcat的端口号是在tomcat/config/server.xml文件中配置的。问题二:release报错,找不到项目中的其他模块或公共模块怎么办?答:因为没有执行父节点maven的install操作,所以install是将public模块放入本地仓库,提供给其他项目使用。问题三:找不到SpringBoot运行的主类怎么办?答:因为没有设置启动类,设置方法是:在pom.xml中配置启动类,配置configuration>com.bi.api.ApiApplication。启动类继承SpringBootServletInitializer实现SpringApplicationBuilder方法。具体代码参见文章第五部分。问题四:部署SpringBoot项目到Tomcat7时,一直提示找不到xxx.jar包?答:这是因为SpringBoot版本太高,tomcat版本太低。如果你使用的是最新版本的SpringBoot,可以考虑将tomcat升级到tomcat8.x+版本来解决这个问题。