Nacos配置管理


Nacos注冊中心提供服務注冊發現,在真實開發中一個項目會有很多微服務實例,每個微服務實例中都有自己獨立的配置,如果有一個配置是多個微服務中都需要使用的話,就需要配置每一個微服務實例,並且還要重啟這些微服務實例。

Nacos不僅有注冊中心還有配置管理,Nacos配置管理可以完成統一配置、配置熱更新

Nacos配置管理

添加Nacos配置管理依賴

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

統一配置管理

統一配置是指配置信息可以被多個微服務實例使用

新建統一配置

讀取統一配置

springboot項目啟動時讀取本地application.yaml文件,然后實現自動裝配

現在需要把Nacos配置信息讀取並讀取,讀取Nacos配置信息步驟:

  1. 讀取Nacos配置信息必須在讀取application.yaml配置文件之前完成(bootstrap.yml這個文件是引導文件,優先級高於application.yml)
  2. 讀取Nacos配置信息之前知道Nacos地址和配置信息Id

通過bootstrap.yml配置nacos地址、當前環境、服務名稱、文件后綴名。這些決定了程序啟動時去nacos讀取哪個配置信息

spring:
  application:
    name: userservice
  profiles:
    active: dev
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        file-extension: yaml

通過Value注解將pattern.dateformat配置注入到Controller中做測試

@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {
    @Value("${pattern.dateformat}")
    private String dateFormat;

    @GetMapping("/now")
    public String now(){
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateFormat, Locale.CHINA));
    }
}

  

配置熱更新

Nacos中的配置信息變更后,微服務實例無需重啟就可以的獲取變更后的配置

方式一:通過@Value注解注入,結合@RefreshScope來刷新(在@Value注入的變量所在類上添加注解@RefreshScope)

@RefreshScope
public class UserController {
    @Value("${pattern.dateformat}")
    private String dateFormat;
    
    .... ....
}

修改Nacos配置

沒有重啟微服務實例前提下訪問 http://localhost:8081/user/now

方式二:通過@ConfigurationProperties注入,自動刷新(推薦

@Data //lombok,提供get、set方法
@Component //將被標記的類注冊成spring容器的Bean
@ConfigurationProperties(prefix = "pattern")//采用約定大於配置的方式:類中屬性和配置中的屬性(pattern.dateformat)一致,就可以完成屬性的自動更新
public class PatternProperties {
    private String dateformat;
}

依賴注入PatternProperties對象

@Slf4j
@RestController
@RequestMapping("/user")
//@RefreshScope
public class UserController {

//    @Value("${pattern.dateformat}")
//    private String dateFormat;
 @Autowired private PatternProperties patternProperties;

    @GetMapping("/now")
    public String now(){
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(patternProperties.getDateformat(), Locale.CHINA));
    }
}

重啟微服務實例

修改Nacos配置信息

訪問 http://localhost:8081/user/now

多環境共享配置

微服務啟動時會從nacos讀取多個配置文件:

  • [spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml
  • [spring.application.name].yaml,例如:userservice.yaml

無論profile如何變化,[spring.application.name].yaml這個文件一定會加載,因此多環境共享配置可以寫入這個文件

Java配置類關聯配置信息

@Data //lombok,提供get、set方法
@Component //將被標記的類注冊成spring容器的Bean
@ConfigurationProperties(prefix = "pattern")//采用約定大於配置的方式,類中屬性和配置文件中的屬性一致,就可以完成屬性的自動更新
public class PatternProperties {
    private String dateformat;
    private String evnShared;
}

獲取信息

    @Autowired
    private PatternProperties patternProperties;
    
    @GetMapping("/properties")
    public PatternProperties properties(){
        return patternProperties;
    }

指定微服務的活動環境

重啟微服務實例,訪問8081和8083

 

優先級:

  [服務名]-[環境].yaml >[服務名].yaml > 本地配置

本地配置

Java配置類關聯配置信息

@Data //lombok,提供get、set方法
@Component //將被標記的類注冊成spring容器的Bean
@ConfigurationProperties(prefix = "pattern")//采用約定大於配置的方式,只要類中屬性和配置文件中的屬性一致,就可以完成屬性的自動更新
public class PatternProperties {
    private String dateformat;
    private String evnShared;
    private String name;
}

Nacos共享配置

Nacos環境配置

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM