成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

強大!Spring Boot全新模塊化管理方式

開發 前端
Spring Boot還提供了豐富的服務配置選項,允許開發者根據需要調整Tomcat服務器的默認行為,如端口,線程數等等,這極大地提升了開發效率。

環境:SpringBoot3.2.5

1. 簡介

默認情況下,Spring Boot項目會內置一個Tomcat服務器,用于快速啟動和運行Web應用程序。這一特性極大地簡化了開發和部署流程,開發者無需單獨配置和安裝Tomcat服務器。Spring Boot還提供了豐富的服務配置選項,允許開發者根據需要調整Tomcat服務器的默認行為,如端口,線程數等等,這極大地提升了開發效率。

當我們在Spring Boot項目中引入Actuator后,并且進行了如下的配置,你是否注意到啟動的應用有什么不同呢?

management:
  server:
    port: 7000

當我們修改了Actuator端口后,啟動服務后控制臺輸出如下:

圖片圖片

應用啟動了2個Tomcat,所有關于Actuator的端點,都將運行在該7000端口的Tomcat服務上(/ac前綴的請求,我修改了默認的前綴)。

開發中,我們可以通過 SpringApplicationBuilder 類實現啟動多個Tomcat實例,將不同的服務(模塊)分別運行在不同的Tomcat實例上,以實現資源隔離并共享主應用的配置。

接下來,我們將詳細介紹如何在Spring Boot應用中啟動多個Tomcat實例,通過這些實例來管理不同的服務或模塊。

2. 實戰案例

我們將按照如下來建立我們的項目及模塊:

圖片

說明:

  • 在上面我們定義了2個模塊分別是:com.pack.m1.*,com.pack.m2.* 。模塊中包含了當前模塊的配置及接口定義等等。
  • 父模塊com.pack.parent.*將作為我們的共享模塊,m1與m2共享該模塊。
  • 針對不同的模塊,分別建立不同的配置文件(如上:m1.properties,m2.properties),這里的配置文件與Spring Boot默認的application.[properties | yml]對等。
  • 其它都于默認的Spring Boot一致。
     

2.1 定義模塊

模塊1

配置類

@Configuration
@ComponentScan(basePackages = {"com.pack.m1"})
@PropertySource({"classpath:m1.properties"})
@EnableAutoConfiguration
public class M1Config {
}

啟動了自動配置,掃描的基包com.pack.m1及對應的配置文件,這里的配置文件就相當于Spring Boot默認的application.yml或properties。

定義測試接口

@RestController
@RequestMapping("/m")
public class M1Controller {


  private final ParentService parentService ;
  public M1Controller(ParentService parentService) {
    this.parentService = parentService ;
  }
  
  @GetMapping("/index")
  public Object m1() {
    return "module 01 -" + this.parentService.query() ;
  }
}

定義配置文件

# m1.properties
server.port=8075
server.servlet.context-path=/m1

這里的配置完全就是Spring Boot提供的那些配置,所以該配置文件你就當是默認的配置文件配置即可。

模塊2

模塊2與模塊1除了內容不一樣外,其它都一致。

@Configuration
@ComponentScan(basePackages = {"com.pack.m2"})
@PropertySource({"classpath:m2.properties"})
@EnableAutoConfiguration
public class M2Config {
}
// 測試接口
@RestController
@RequestMapping("/m")
public class M1Controller {


  private final ParentService parentService ;
  public M2Controller(ParentService parentService) {
    this.parentService = parentService ;
  }
  
  @GetMapping("/index")
  public Object m2() {
    return "module 02 - " + this.parentService.query() ;
  }
}
// 配置文件m2.properties內容
server.port=8076
server.servlet.context-path=/m2

這里為了區分所以為不同的模塊配置了不同的上下文。

按照如果的結構,不同的模塊內容定義在對應的m1,m2包下即可。

2.2 父模塊定義

由于父模塊是其它子模塊共享的,沒有什么特別的配置,我們就定義一個配置及測試接口即可。

@Service
public class ParentService {


  public String query() {
    return "我是父模塊內容" ;
  }
}

配置類

@Configuration
@ComponentScan(basePackages = {"com.pack.parent"})
public class ParentConfig {
}

這里我們并沒有配置啟用Web MVC所以,我們上面的ParentController類并不會生效。(注意:并不僅僅是啟用Web MVC那么簡單,還需要Spring適合的容器支持,這與下面我們將要看到的配置有關)。

2.3 全局配置文件

不管你如何配置(除非你通過spring.config.name進行了修改)默認的application.yml或properties還是會生效了。默認的文件內容如下:

spring:
  application:
    name: springboot-parent-child
---
logging:
  include-application-name: false
  pattern:
    dateformat: HH:mm:ss

如果你希望你的子模塊都能繼承某些配置,那么你可以將配置信息都寫入該公共的文件中。

2.4 啟動類

最后一步就是啟動類了,這時候就與之前的Spring Boot默認的啟動類完全不同了,內容如下:

public class SpringbootParentChildApplication {


  public static void main(String[] args) {
    SpringApplicationBuilder builder = new SpringApplicationBuilder() ;
    builder
      // 配置父容器的配置類(這一步內部就將當前容器設置為非web容器)
      .parent(ParentConfig.class) 
      // 配置子容器對應的配置及web應用
      .child(M1Config.class).web(WebApplicationType.SERVLET)
      // 配置子容器(與上面的child相當于兄弟容器),他們都有共同的父容器
      // 在這一步將會創建父容器及上面child子容器
      .sibling(M2Config.class).web(WebApplicationType.SERVLET)
      // 而這里則會創建sibling設置子容器
      .run(args) ;
  }
}

在該啟動類上我們沒有添加任何的注解(默認你需要添加@SpringBootApplication)。

2.5 測試

啟動服務后,控制臺日志輸入如下:

圖片圖片

啟動了2個Tomcat實例,分別運行在8075和8076端口上。接下來訪問接口測試

圖片圖片

模塊1

圖片

模塊2

兩個模塊都正常訪問接口及父模塊中的組件。

責任編輯:武曉燕 來源: Spring全家桶實戰案例源碼
相關推薦

2013-07-09 13:13:27

路由器管理路由器

2009-12-25 17:15:03

Linux內存

2013-03-14 10:28:52

管理人才管理管理方式

2019-08-28 16:18:39

JavaScriptJS前端

2009-07-09 17:59:16

模塊化系統英特爾服務器

2015-03-16 12:49:56

虛擬化

2020-09-17 10:30:21

前端模塊化組件

2013-08-20 15:31:18

前端模塊化

2017-05-18 10:23:55

模塊化開發RequireJsJavascript

2015-10-10 11:29:45

Java模塊化系統初探

2022-03-11 13:01:27

前端模塊

2020-09-18 09:02:32

前端模塊化

2019-03-14 15:00:48

混合云云計算管理

2011-02-25 14:00:15

ProFTPD

2010-03-18 10:45:43

網管交換機

2010-09-30 11:55:03

DB2表空間

2022-09-05 09:01:13

前端模塊化

2018-03-21 21:31:28

Java9編程Java

2012-08-30 09:47:16

企業社交

2016-10-09 11:03:41

Javascript模塊化Web
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 久久久久久久久久一区二区 | 亚洲网站在线观看 | 午夜影视在线观看 | 国产亚洲区 | 91在线精品播放 | 国产欧美在线播放 | 国产97视频在线观看 | 免费观看的av毛片的网站 | 成人在线视频免费观看 | 日韩欧美高清dvd碟片 | 精品免费视频一区二区 | 欧美视频精品 | 久久影院一区 | 性一交一乱一透一a级 | 国偷自产av一区二区三区 | 日本在线精品视频 | 一区二区国产在线 | 亚洲另类春色偷拍在线观看 | 一区二区三区视频在线免费观看 | 成人在线精品 | 中文字幕高清视频 | 成人一级片在线观看 | 久久综合亚洲 | 夜夜爽99久久国产综合精品女不卡 | 欧美一区二区三区视频 | 亚洲精品日韩精品 | 久久久久久久久91 | 成人国产精品色哟哟 | 午夜视频精品 | 日韩精品一区二区三区中文字幕 | 福利网址| 亚洲精品国产成人 | 91精品久久久久久久 | 精品久久精品 | 国产一在线 | 久久国产精品无码网站 | 欧美狠狠操 | 三级成人在线 | 毛片久久久 | 黄色网址免费看 | 国产精品久久久久久久7电影 |