解决SpringBoot多模块发布时99%的问题?SpringBoot发布的8个原则和4个问题的解决方案

简介: 解决SpringBoot多模块发布时99%的问题?SpringBoot发布的8个原则和4个问题的解决方案

微信图片_20220117181003.jpg


如果使用的是 SpringBoot 多模块的项目,在发布的时候可能遇到各种各样的问题。本文归纳了以下 8 个原则和发布时经常出现的 4 个问题的解决方案,掌握了这些原则和解决方案,几乎可以解决绝大数 SpringBoot 发布问题。


SpringBoot多模块发布的8大原则


1 在发布模块打包,而不是父模块上打包


比如,以下项目目录:


微信图片_20220117181006.png


如果要发布api 就直接在它的模块上打包,而不是在父模块上打包。


2 公共调用模块,打包类型设置为jar格式


公共模块,比如 common 和 model 需要设置 packaging 为 jar 格式,在 pom.xml 配置:

1. <packaging>jar</packaging>


3 发布模块打包类型设置为war格式


在发布的模块 pom.xml 中设置:

1. <packaging>war</packaging>


4 排除内置tomcat


在发布的模块 pom.xml 中设置:
1. <dependency>
2.     <groupId>org.springframework.boot</groupId>
3.     <artifactId>spring-boot-starter-tomcat</artifactId>
4.     <scope>provided</scope>
5. </dependency>
当设置 scope=provided 时,此 jar 包不会出现在发布的项目中,从而就排除了内置的 tomcat。


5 设置启动类


此步骤相当于告诉 tomcat 启动的入口在哪。需要在启动类添加如下代码:


 @SpringBootApplication
 public class ApiApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(ApiApplication.class);
    }
     public static void main(String[] args) {
        SpringApplication.run(ApiApplication.class, args);
    }
 }


6 如果使用拦截器一定要排除静态文件


比如我在项目中使用了 swagger,那我就需要排除 swagger 的静态文件,代码如下:


@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {
    @Override
    protected void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 排除静态文件
        registry.addResourceHandler("swagger-ui.html")
                .addResourceLocations("classpath:/META-INF/resources/");
        registry.addResourceHandler("/webjars/**")
                .addResourceLocations("classpath:/META-INF/resources/webjars/");
    }
    // do something
}


7 先装载公共模块,再发布项目


如果发布的模块引用了本项目的其他公共模块,需要先把本项目的公共模块装载到本地仓库。


操作方式,双击父模块的 install 即可, install 成功之后,点击发布模块的 package 生成 war 包,就完成了项目的打包,如下图所示:


微信图片_20220117181008.jpg


8 部署项目


有了 war 包之后,只需要把单个 war 包,放入 tomcat 的 webapps 目录,重新启动 tomcat 即可,如下图所示:


微信图片_20220117181011.jpg


项目正常运行会在 webapps 目录下生成同名的文件夹,如下图所示:


微信图片_20220117181013.png


完成以上配置,就可以 happy 的访问自己发布的项目了。


可能出现的问题和解决方案


问题一:SpringBoot 配置了端口号影不影响程序发布?


答:不影响,配置的 server.port 会被覆盖,以 tomcat 本身的端口号为准,tomcat 端口号在 tomcat/config/server.xml  文件中配置。


问题二:发布报错,不能找到其他模块或项目中的公共模块,怎么办?


答:因为没有执行父节点 maven 的 install 操作,install 就是把公共模块放入本地仓库,提供给其它项目使用。


问题三:不能找到 SpringBoot 运行的 main 类,怎么办?


答:因为没有设置启动类导致的,设置方式:


  • pom.xml 配置启动类,配置 configuration><mainClass>com.bi.api.ApiApplication</mainClass></configuration> 。


  • 启动类继承 SpringBootServletInitializer 实现 SpringApplicationBuilder 方法,具体代码参考文中第五部分。


问题四:把 SpringBoot 项目部署到 Tomcat 7 一直提示找不到 xxx.jar 包?


答:这是因为 SpringBoot 版本太高,tomcat 版本太低的原因。如果你使用的是最新版的 SpringBoot,可以考虑把 tomcat 也升级为 tomcat 8.x+ 最新的版本,就可以解决这个问题。


相关文章
|
NoSQL 数据可视化 关系型数据库
SpringBoot 多模块项目打包部署保姆级教程
SpringBoot 多模块项目打包部署保姆级教程
1222 0
SpringBoot 多模块项目打包部署保姆级教程
|
Java 测试技术 容器
SpringBoot单元测试报空指针异常解决方案
java.lang.NullPointerException空指针异常 1.测试类中产生空指针异常,可能不是你的逻辑代码写错了,而是因为获取容器失败,即没有使用正确的测试方法 2.在SpringBoot项目中我们一般可以使用两种Junit进行测试,在导入@Test包时,会出现两个选项
1293 0
SpringBoot单元测试报空指针异常解决方案
|
5月前
|
Java API Maven
IDEA+Maven+多个Module模块(创建多模块SpringBoot整合项目)
IDEA+Maven+多个Module模块(创建多模块SpringBoot整合项目)
288 1
|
3月前
|
消息中间件 负载均衡 Java
最容易学会的springboot gralde spring cloud 多模块微服务项目
最容易学会的springboot gralde spring cloud 多模块微服务项目
|
5月前
|
Java 数据库 Spring
springboot 解耦、隔离、异步的原则以及实战
【5月更文挑战第30天】在Spring Boot中实现解耦、隔离和异步的原则,能够提升应用程序的可维护性、可扩展性和性能。下面我会先介绍这三个原则的基本概念和意义,然后通过实战示例展示如何在Spring Boot应用中应用这些原则。
76 1
|
11月前
|
Java
springboot(若依)多模块获取yml属性
springboot(若依)多模块获取yml属性
217 0
|
Java 数据库连接 Maven
IDEA创建SpringBoot的多模块项目教程
IDEA创建SpringBoot的多模块项目教程
430 0
|
5月前
|
XML Java Maven
SpringBoot使用Maven建立多模块工程(二)
SpringBoot使用Maven建立多模块工程(二)
54 0
|
5月前
|
Java 应用服务中间件 API
SpringBoot使用Maven建立多模块工程(一)
SpringBoot使用Maven建立多模块工程(一)
149 0
|
12月前
|
XML Java 测试技术
JVM && 软件测试的目的和原则 && Spring基本概念 && 项目创建 && 软件测试的生命周期 && SpringBoot创建和运行 && Bean作用域
JVM && 软件测试的目的和原则 && Spring基本概念 && 项目创建 && 软件测试的生命周期 && SpringBoot创建和运行 && Bean作用域
81 0