想從 springcloud
中切換到 springcloud alibaba
本文可以起到指引作用
頭號大事是服務註冊發現,在選型上我優先考慮了 consul
弄完之後發現沒有傳說中的那麼香,於是乎換成了 nacos
下面是集成 nacos
的過程
在開始之前首先需要看一下 nacos入門
一、搭建 nacos
服務
- 運行以下命令使用
docker
來虛擬化服務
git clone https://github.com/nacos-group/nacos-docker.git
docker-compose -f nacos-docker/example/standalone-derby.yaml up -d
以上運行完成後會在本地 8848
啓動一個 nacos
服務
- 控制面板訪問
http://localhost:8848/nacos
默認賬戶和密碼是nacos
- 在
nacos
默認registry
的類型是file
用默認的就行
二、創建一個 springboot
項目
- 可以使用 https://start.aliyun.com/ 來創建
- 在
maven
中加入依賴
<!--提供 springboot 監控指標暴露-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--提供 nacos 服務註冊發現-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--提供 nacos 動態配置-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
三、實現動態配置
- 登錄
nacos
在nacos
中增加一個配置列表
Data Id | Group | 配置格式 | 配置內容 |
---|---|---|---|
dev | LC_GROUP | YAML | spring.profiles.active: dev |
- 在創建的項目中配置
因爲springboot
的設定是bootstrap.yml
最高優先級,所以創建一個bootstrap.yml
,寫入如下內容
spring:
application:
name: nacos-consumer
cloud:
nacos:
config:
server-addr: localhost:8848 #Nacos服務器偵聽器的IP和端口 #80不能省略
file-extension: yaml
group: LC_GROUP # 與Nacos配置的組名相同 默認是 DEFAULT_GROUP
timeout: 3000 # 從nacos獲取配置超時
name: dev #對應配置的data名
- 在啓動入口上加上
@EnableDiscoveryClient
註解
@EnableDiscoveryClient
@SpringBootApplication
public class NacosConsumerApplication{
public static void main(String[] args) {
SpringApplication.run(NacosConsumerApplication.class, args);
}
@LoadBalanced
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
}
四、測試動態配置
- 代碼
@RestController
@RequestMapping("/config")
@RefreshScope //Nacos動態刷新配置 需要熱加載的bean需要加上@RefreshScope註解,當配置發生變更的時候可以在不重啓應用的前提下完成bean中相關屬性的刷新
public class ConfigController {
@Value("${spring.profiles.active}")
String active;
@Autowired
RestTemplate restTemplate;
/**
* http://localhost:8080/config/get
*/
@GetMapping("get")
public String get(@RequestParam(required = false) String str) {
return active + " | " + str;
}
/**
* http://localhost:8080/config/rest
*/
@SentinelResource("ss")
@GetMapping("rest")
public String rest() {
return restTemplate.getForObject("http://nacos-provider/config/get/" + "?str=consumerSend", String.class);
}
}
- 啓動項目後 訪問
http://localhost:8080/config/get
- 更改原先在
nacos
增加的Data Id
爲dev
的配置表,將配置內容改爲spring.profiles.active: test
無需重啓服務,直接刷新上一步的訪問地址
到此 nacos
的動態配置已經完成