小夥伴們在初入職場(尤爲大廠)看到別人的工程,是否曾有以下困擾:java
反觀本身建立的工程,代碼都堆在一個模塊裏面,或許還不清楚模塊的概念;更別提多環境了;spring
今天咱們一文搞定,讓咱們離大廠更近一步。編程
在模塊化編程中,開發者將程序分解成離散功能塊(discrete chunks of functionality),並稱之爲模塊。api
每一個模塊具高內聚的特性,使得校驗、調試、測試垂手可得。 精心編寫的模塊提供了可靠的抽象和封裝界限,使得每一個模塊都具備條理清楚的設計和明確的目的。緩存
在pom中,增長modules節點,模塊名<module>任意名稱</module>,能夠配置多個;架構
<modules> <module>seckill-api</module> <module>seckill-biz</module> </modules>
一般到這裏,多模塊就配置完畢了。但現實中,咱們的模塊間是須要相互依賴的,同時每一個模塊還要依賴第三方模塊;併發
seckill-api(api層)要依賴seckill-biz(業務層),在api模塊的pom文件中,增長以下配置app
<dependencies> <dependency> <groupId>com.sifou.courses</groupId> <artifactId>seckill-biz</artifactId> <version>1.0-SNAPSHOT</version> </dependency> </dependencies>
假定,api和biz模塊都依賴lombok,validation-api這兩個第三方模塊(包),如何實現?maven
相信你們都會選擇方案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
在工做中,咱們面臨開發、測試、生產等等多個環境,要完美實現多環境,總共能夠分文兩個大的步驟;
在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}
在啓動腳本中,增長上面這個,按環境來指定要加載的配置文件;
以上,歡迎你們多交流。
我在思否開了一門《大廠電商 Java 秒殺系統架構實戰》課程,本課程從秒殺場景出發,分爲基礎篇、進階篇、架構篇3部分。
經過秒殺這個典型的高併發場景,帶你完全搞明白高併發系統該如何設計。