寫在前面的文章
快速入門
接下來通過一個簡單的例子實現在 Nacos 中創建配置,在 SpringBoot 應用中加載 Nacos 配置並響應 Nacos 中的配置變化
創建配置
第一步:進入 Nacos 管理界面,選擇 配置管理 \> 配置列表
,點擊右側 +
號創建新配置
重要的配置項說明:
- DataId:使用
{項目名}.{配置格式}
的格式,本次填入nacos-config-client.properties
- Group:分組名,默認爲
DEFAULT_GROUP
,本次操作使用默認值 - 配置格式:默認爲
properties
,本次操作使用默認值,如果要使用其它格式則需要在應用中進行相應地配置 - 配置內容:填入
couse.title=nacos
創建應用
第一步:創建一個 SpringBoot 應用,命名爲 nacos-config-client
,保持跟上面的 DataId
一致
第二步:添加依賴
添加父依賴
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
<relativePath/>
</parent>
添加依賴管理器
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>0.2.2.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
添加依賴
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Nacos配置模塊 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
本例並沒有添加對 Nacos 服務註冊發現模塊的依賴,配置功能跟服務註冊發現功能是完全分立的,可以獨立使用。
第三步:配置
配置服務名稱及 Nacos 地址
server.port=8083
spring.application.name=nacos-config-client
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.application.name
配置成與 Nacos 中創建的DataId
一致
第四步:創建啓動類,並提供一個對外接口
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Slf4j
@RestController
@RefreshScope
static class TestController {
@Value("${couse.title}")
private String title;
@GetMapping("/test")
public String hello() {
return title;
}
}
}
接口實現很簡單,就是輸出配置文件中的 couse.title
的內容
@Value
註解用於讀取配置文件中的配置@RefreshScope
註解用於支持動態刷新配置內容,有了這個註解,在 Nacos 修改配置內容,@Value
就會及時讀取到最新的內容
第五步:啓動應用
在啓動日誌最開始可以看到兩行日誌,說明已經成功從 Nacos 中加載配置,而且是在應用啓動之前進行加載
Loading nacos data, dataId: 'nacos-config-client.properties', group: 'DEFAULT_GROUP'
Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='nacos-config-client.properties'}]}
驗證配置獲取
訪問接口 http://localhost:8083/test
,如果一切正常,則會輸出 Nacos 中配置的 nacos
驗證配置動態更新
在 Nacos 管理後臺修改配置內容爲 couse.title=nacos changed
,再次訪問接口,可以看到輸出的結果也會相應改變。
查看日誌,可以看到配置被重新加載
Loading nacos data, dataId: 'nacos-config-client.properties', group: 'DEFAULT_GROUP'
Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='nacos-config-client.properties'}]}
...
Refresh keys changed: [couse.title]
擴展
前面的例子要求 spring.application.name
配置成與 Nacos 中創建的 DataId
一致,只是爲了採用默認配置,減少配置量。
通過自定義配置可以實現對任意名稱的配置文件進行加載。
涉及配置項:
- spring.cloud.nacos.config.prefix:配置文件前綴,如果沒有配置,則默認使用
spring.application.name
值 - spring.cloud.nacos.config.file-extension:配置文件後綴,默認爲 properties
- spring.cloud.nacos.config.group:配置文件分組,默認爲 DEFAULT_GROUP
Nacos 採用 Group + DataId
進行配置文件定位,其中 DataId = {prefix}.{file-extension}
。
如下配置,則會加載 DEV_GROUP
分組下的 example.yaml
文件
spring.cloud.nacos.config.prefix=example
spring.cloud.nacos.config.file-extension=yaml
spring.cloud.nacos.config.group=DEV_GROUP