Spring Boot - 多模块多环境配置,大厂必备技能

开发 后端
反观自己创建的工程,代码都堆在一个模块里面,或许还不清楚模块的概念;更别提多环境了;今天我们一文搞定,让我们离大厂更近一步。

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

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

反观自己创建的工程,代码都堆在一个模块里面,或许还不清楚模块的概念;更别提多环境了;

今天我们一文搞定,让我们离大厂更近一步。

多模块

模块

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

多模块的优点

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

实现多模块

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

创建maven工程

配置多模块

在pom中,增加modules节点,模块名<module>任意名称</module>,可以配置多个; 

  1. <modules>  
  2.  <module>seckill-api</module>  
  3.  <module>seckill-biz</module>  
  4. </modules> 

通常到这里,多模块就配置完毕了。但现实中,我们的模块间是需要相互依赖的,同时每个模块还要依赖第三方模块;

添加模块依赖

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

  1. <dependencies>  
  2.  <dependency>  
  3.       <groupId>com.sifou.courses</groupId>  
  4.      <artifactId>seckill-biz</artifactId>  
  5.      <version>1.0-SNAPSHOT</version>  
  6.  </dependency>  
  7. </dependencies> 

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

  •  方案1:在每个(biz & api)模块中,增加依赖;
  •  方案2:在父模块增加依赖;

相信大家都会选择方案2;在root工程中的pom文件,增加如下配置; 

  1. <properties>  
  2.       <lombok.version>1.18.8</lombok.version>  
  3.       <javax.validation>2.0.1.Final</javax.validation>  
  4.   </properties>  
  5.   <dependencies>  
  6.       <dependency>  
  7.           <groupId>org.projectlombok</groupId>  
  8.           <artifactId>lombok</artifactId>  
  9.           <version>${lombok.version}</version>  
  10.       </dependency>  
  11.       <dependency>  
  12.           <groupId>javax.validation</groupId>  
  13.           <artifactId>validation-api</artifactId>  
  14.           <version>${javax.validation}</version>  
  15.       </dependency>  
  16.   </dependencies> 

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

还可以用mvn dependency:tree命令,来查看依赖关系(必备核心技能,解决包冲突,解决包版本失效) 

  1. [INFO] Scanning for projects...  
  2. [INFO] ------------------------------------------------------------------------  
  3. [INFO] Reactor Build Order:  
  4. [INFO]   
  5. [INFO] com.sifou.courses.seckill  
  6. [INFO] seckill-biz  
  7. [INFO] seckill-api  
  8. [INFO]                                                                        
  9. [INFO] ------------------------------------------------------------------------  
  10. [INFO] Building com.sifou.courses.seckill 1.0-SNAPSHOT  
  11. [INFO] ------------------------------------------------------------------------  
  12. [INFO]   
  13. [INFO] --- maven-dependency-plugin:3.1.2:tree (default-cli) @ com.sifou.courses.seckill ---  
  14. [INFO] com.sifou.courses:com.sifou.courses.seckill:pom:1.0-SNAPSHOT  
  15. [INFO] +- org.projectlombok:lombok:jar:1.18.8:compile  
  16. [INFO] \- javax.validation:validation-api:jar:2.0.1.Final:compile  
  17. [INFO]                                                                       
  18. [INFO] ------------------------------------------------------------------------  
  19. [INFO] Building seckill-biz 1.0-SNAPSHOT  
  20. [INFO] ------------------------------------------------------------------------  
  21. [INFO]   
  22. [INFO] --- maven-dependency-plugin:3.1.2:tree (default-cli) @ seckill-biz ---  
  23. [INFO] com.sifou.courses:seckill-biz:jar:1.0-SNAPSHOT  
  24. [INFO] +- org.projectlombok:lombok:jar:1.18.8:compile  
  25. [INFO] \- javax.validation:validation-api:jar:2.0.1.Final:compile  
  26. [INFO]                                                                        
  27. [INFO] ------------------------------------------------------------------------ 
  28. [INFO] Building seckill-api 1.0-SNAPSHOT  
  29. [INFO] ------------------------------------------------------------------------  
  30. [INFO]   
  31. [INFO] --- maven-dependency-plugin:3.1.2:tree (default-cli) @ seckill-api ---  
  32. [INFO] com.sifou.courses:seckill-api:jar:1.0-SNAPSHOT  
  33. [INFO] +- com.sifou.courses:seckill-biz:jar:1.0-SNAPSHOT:compile 
  34. [INFO] +- org.projectlombok:lombok:jar:1.18.8:compile  
  35. [INFO] \- javax.validation:validation-api:jar:2.0.1.Final:compile  
  36. [INFO] ------------------------------------------------------------------------  
  37. [INFO] Reactor Summary:  
  38. [INFO]   
  39. [INFO] com.sifou.courses.seckill .......................... SUCCESS [  1.007 s]  
  40. [INFO] seckill-biz ........................................ SUCCESS [  0.040 s]  
  41. [INFO] seckill-api ........................................ SUCCESS [  0.036 s]  
  42. [INFO] ------------------------------------------------------------------------  
  43. [INFO] BUILD SUCCESS  
  44. [INFO] ------------------------------------------------------------------------  
  45. [INFO] Total time: 1.862 s  
  46. [INFO] Finished at: 2020-10-29T23:18:09+08:00  
  47. [INFO] Final Memory: 27M/230M  
  48. [INFO] ------------------------------------------------------------------------ 
  49. 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配置文件内容

多环境启动

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

  1. -Dspring.profiles.active=${PROFILE} 

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

以上,欢迎大家多交流。

最后

我在思否开了一门《大厂电商 Java 秒杀系统架构实战》课程,本课程从秒杀场景出发,分为基础篇、进阶篇、架构篇3部分。

  •  基础篇重点在于实现功能(导购、交易)
  •  进阶篇重点突破超卖、突发流量给系统带来的挑战,高并发银弹,缓存如何使用;
  •  架构篇重点讲解如何保障系统高可用(方法论+最佳实践)

通过秒杀这个典型的高并发场景,带你彻底搞明白高并发系统该如何设计。 

 

责任编辑:庞桂玉 来源: segmentfault
相关推荐

2022-02-16 19:42:25

Spring配置开发

2020-03-24 14:55:48

Spring Boot多模块Java

2023-11-01 15:07:51

环境配置方式

2021-09-29 19:16:07

前端React配置

2023-10-04 00:50:00

Java开发

2009-07-21 17:39:50

iBATIS的多对多映

2020-05-14 18:04:20

Spring BootSaaS平台

2020-11-18 10:06:18

Linux多网卡路由

2009-12-16 13:53:51

Ruby多继承

2022-12-30 08:17:28

Gradle多模块项目

2013-11-26 16:32:03

MYSQLMYSQL配置

2021-01-11 09:17:49

GitLabCIMonorepoDocker

2009-06-11 09:35:47

GlassFish配置多机集群

2014-04-29 14:54:48

Nginx反向代理

2020-10-23 11:10:51

Spring BootShellJava

2023-11-06 08:26:11

Spring微服务架构

2022-12-20 10:15:45

开发集群

2015-10-10 10:21:26

OpenStackRegion多Region

2010-03-25 12:55:19

windows7VHDNative Boot

2010-07-19 11:37:09

FCoE
点赞
收藏

51CTO技术栈公众号