Solon2 專案整合 Nacos 配置中心

帶刺的坐椅發表於2023-03-06

網上關於 Nacos 的使用介紹已經很多了,尤其是與 SpringBoot 的整合使用。怎麼安裝也跳過了,主要就講 Nacos 在 Solon 裡的使用,這個網上幾乎是沒有的。

1、認識 Solon

Solon 一個高效的應用開發框架:更快、更小、更簡單,也是個新起的 Java 生態。
啟動快 5 ~ 10 倍;qps 高 2~ 3 倍;執行時記憶體節省 1/3 ~ 1/2;打包可以縮到 1/2 ~ 1/10;同時支援 jdk8, jdk11, jdk17, jdk19。

Solon 專案官網:https://solon.noear.org

2、認識 Solon Cloud Config

Solon Cloud 是一套分散式(或微服務)開發的介面與配置規範。其中 Solon Cloud Config 為雲端配置服務,主要提供分散式配置服務的介面並與相關的中介軟體客戶端進行適配:

  • 透過 CloudConfigService 介面與中介軟體進行適配
  • 使用 CloudClient.config() 獲取適配例項,可支援手動操作
  • 一般透過透過配置和 @CloudConfig 註解進行使用

其中 nacos-solon-cloud-plugin,是 nacos 關於 solon cloud config 的適配。也是本文的主角。

3、專案整合

3.1、在 Nacos 準備兩個配置

安裝好 Nacos配置後,需要準備下配置資料。新建個“test”名稱空間;然後,準備 DataId 為 “demoapp.yml” 配置(這個配置,用於匯入到應用屬性):

demo.user.name: "1"

再準備 DataId 為 “demo-ds” 配置(這個配置,將直接使用):

demo.ds:
  url: ""
  username: ""
  password: ""

3.2、建立專案,完成配置

藉助 Solon Initializr( https://solon.noear.org/start/ ) 生成一個 maven + java 的專案模組(這樣方便些)。用開發工具開啟專案(比如 IDEA)。在 pom.xml 裡面新增依賴:

<dependencies>
    <dependency>
        <groupId>org.noear</groupId>
        <artifactId>nacos-solon-cloud-plugin</artifactId>
    </dependency>
</dependencies>

然後,在應用屬性配置檔案“app.yml”,新增 nacos 的連線資訊:

solon.app:
  name: "demoapp"
  group: "demo"
  namespace: "test"

solon.cloud.nacos:
  server: "localhost:8848"           #nacos 服務地址
  config:
    load: "demoapp.yml"                #載入配置到應用屬性(多個以","隔開)

“...config.load” 會匯入配置到應用屬性。之後可用“@Inject”注入,也可用“Solon.cfg().get(...)”獲取。

3.3、程式碼應用

在模板專案裡,新增 "Config" 類:

@Configuration
public class Config {
    //注入使用者名稱 //來自 config.load 匯入到應用屬性的
    @Inject("${demo.user.name}") 
    String userName;
    
    //注入並轉為資料來源 //直接來自 DataId = demo-ds
    @Bean
    public DataSource ds(@CloudConfig("demo-ds") HikariDataSource ds){
        return ds;
    }
}

直接獲取 nacos 配置,可以透過"@CloudConfig"註解,或者 "CloudClient.config().pull(group, name)" 手動獲取。

4、多馬甲專案的應用

很多情況下,公司會有相同的程式碼,但是不同的運營專案。這個場景下,自然是希望程式碼都不用改。

4.1、新增新的名稱空間

在 Nacos 裡,新增 “test2” 名稱空間。然後把剛才的配置 DataId 複製一份。

4.2、修改專案應用配置

  • 透過 app.yml 修改配置
solon.app:
  name: "demoapp"
  group: "demo"
  namespace: "test2"

solon.cloud.nacos:
  server: "localhost:8848"           #nacos 服務地址
  config:
    load: "demoapp.yml"                #載入配置到應用屬性(多個以","隔開)
  • 透過啟動時指定(方式二)
java -Dsolon.app.namespace=test2 -jar demoapp.jar 
  • 透過容器映象的環境變數指定 (方式三)
services:
  demoapp:
    image: demo/demoapp:1.0.0
    container_name: demoapp
    environment:
      - solon.app.namespace=test2
      - TZ=Asia/Shanghai
    ports:
      - 8080:8080

方式二、方式三。什麼都不用改,只需要在部署執行時指定一下,推薦!

相關文章