关于java:Spring-Boot-多模块多环境配置大厂必备技能

63次阅读

共计 4474 个字符,预计需要花费 12 分钟才能阅读完成。

小伙伴们在初入职场(尤其大厂)看到他人的工程,是否曾有如下困扰:

  • 在一个工程外面如何实现多模块,分模块开发怎么搞?
  • 公司那么多环境,相互隔离,配置各不相同,如何实现多环境?

反观本人创立的工程,代码都堆在一个模块外面,或者还不分明模块的概念;更别提多环境了;

明天咱们一文搞定,让咱们离大厂更近一步。

多模块

模块

在模块化编程中,开发者将程序分解成离散功能块(discrete chunks of functionality),并称之为模块。

多模块的长处

每个模块具高内聚的个性,使得校验、调试、测试轻而易举。精心编写的模块提供了牢靠的形象和封装界线,使得每个模块都具备条理清楚的设计和明确的目标。

实现多模块

  1. 创立 maven 工程
  2. 配置多模块
  3. 增加模块依赖
创立 maven 工程



配置多模块

在 pom 中,减少 modules 节点,模块名 <module> 任意名称 </module>,能够配置多个;

<modules>
 <module>seckill-api</module>
 <module>seckill-biz</module>
</modules>

通常到这里,多模块就配置结束了。但事实中,咱们的模块间是须要相互依赖的,同时每个模块还要依赖第三方模块;

增加模块依赖

seckill-api(api 层)要依赖 seckill-biz(业务层),在 api 模块的 pom 文件中,减少如下配置

<dependencies>
 <dependency> 
     <groupId>com.sifou.courses</groupId>
     <artifactId>seckill-biz</artifactId>
     <version>1.0-SNAPSHOT</version>
 </dependency>
</dependencies>
 

假设,api 和 biz 模块都依赖 lombok,validation-api 这两个第三方模块(包),如何实现?

  • 计划 1:在每个(biz & api)模块中,减少依赖;
  • 计划 2:在父模块减少依赖;

置信大家都会抉择计划 2;在 root 工程中的 pom 文件,减少如下配置;

    <properties>
        <lombok.version>1.18.8</lombok.version>
        <javax.validation>2.0.1.Final</javax.validation>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>${lombok.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>${javax.validation}</version>
        </dependency>
    </dependencies>

到这里,配置实现;(是不是很清晰,请投币,点赞)

还能够用 mvn dependency:tree 命令,来查看依赖关系(必备外围技能,解决包抵触,解决包版本生效)

[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Build Order:
[INFO] 
[INFO] com.sifou.courses.seckill
[INFO] seckill-biz
[INFO] seckill-api
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building com.sifou.courses.seckill 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-dependency-plugin:3.1.2:tree (default-cli) @ com.sifou.courses.seckill ---
[INFO] com.sifou.courses:com.sifou.courses.seckill:pom:1.0-SNAPSHOT
[INFO] +- org.projectlombok:lombok:jar:1.18.8:compile
[INFO] \- javax.validation:validation-api:jar:2.0.1.Final:compile
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building seckill-biz 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-dependency-plugin:3.1.2:tree (default-cli) @ seckill-biz ---
[INFO] com.sifou.courses:seckill-biz:jar:1.0-SNAPSHOT
[INFO] +- org.projectlombok:lombok:jar:1.18.8:compile
[INFO] \- javax.validation:validation-api:jar:2.0.1.Final:compile
[INFO]                                                                         
[INFO] ------------------------------------------------------------------------
[INFO] Building seckill-api 1.0-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] 
[INFO] --- maven-dependency-plugin:3.1.2:tree (default-cli) @ seckill-api ---
[INFO] com.sifou.courses:seckill-api:jar:1.0-SNAPSHOT
[INFO] +- com.sifou.courses:seckill-biz:jar:1.0-SNAPSHOT:compile
[INFO] +- org.projectlombok:lombok:jar:1.18.8:compile
[INFO] \- javax.validation:validation-api:jar:2.0.1.Final:compile
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO] 
[INFO] com.sifou.courses.seckill .......................... SUCCESS [1.007 s]
[INFO] seckill-biz ........................................ SUCCESS [0.040 s]
[INFO] seckill-api ........................................ SUCCESS [0.036 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.862 s
[INFO] Finished at: 2020-10-29T23:18:09+08:00
[INFO] Final Memory: 27M/230M
[INFO] ------------------------------------------------------------------------

Process finished with exit code 0

多环境

在工作中,咱们面临开发、测试、生产等等多个环境,要完满实现多环境,总共能够分文两个大的步骤;

  • 在工程中反对多环境配置;
  • 在实在环境中实现多环境启动;

反对多环境配置

  1. 创立 properties 文件
  2. 指定环境参数
创立 properties 文件

在 resources 文件夹下创立三个以 properties 为后缀的文件
例如:
application-dev.properties:开发环境
application-test.properties:测试环境
application-prod.properties:生产环境

指定环境参数

spring.profiles.active=test

到这里,多环境配置实现;
在 Spring Boot 中多环境配置文件名必须满足:application-{profile}.properties的固定格局,其中 {profile} 对应你的环境标识;

例如:
application-dev.properties:开发环境
application-test.properties:测试环境
application-prod.properties:生产环境

application.properyies 通过 spring.profiles.active 来具体激活一个或者多个配置文件,如果没有指定任何 profile 的配置文件的话,spring boot 默认会启动 application-default.properties;而哪个配置文件运行:

spring.profiles.active=test

就会加载 application-test.properties 配置文件内容

多环境启动

刚刚讲了在工程中如何配置,那么在真正的环境中如何启动?莫非,改配置吗???当然不是,正解如下。

-Dspring.profiles.active=${PROFILE}

在启动脚本中,减少下面这个,按环境来指定要加载的配置文件;

以上;欢送大家多交换 ============

正文完
 0