一,下載Nacos
下載地址:https://github.com/alibaba/nacos/releases
二,啓動Nacos
安裝Nacos的bin目錄下,
執行:startup.cmd -m standalone
然後打開上圖紅框的地址
三,配置服務
1 配置Nacos
創建命名空間(無論本地還是測試服務期,全部註冊到Nacos上,通過命名空間可以區分本地還是測試服務器的服務)
2 創建一個配置文件
test.yml:
記得選擇 YAML
spring: datasource: url: jdbc:mysql://localhost:3306/test1?useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC username: root password: root name: hello wrold!!!
四,編寫項目
1 項目結構
一個父的pom,一個子項目
父pom
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.0.2</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.test</groupId> <artifactId>nacos_test</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>pom</packaging> <name>nacos_test</name> <description>nacos_test</description> <modules> <module>test1</module> </modules> <properties> <java.version>17</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <!-- Web依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- 日誌依賴 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-logging</artifactId> </dependency> <!-- Lombok工具 --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.30</version> <scope>provided</scope> </dependency> <!-- Actuator可以幫助你監控和管理Spring Boot應用 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- 熱部署 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bootstrap</artifactId> <version>3.0.2</version> </dependency> </dependencies> <dependencyManagement> <dependencies> <!--Spring Cloud Alibaba微服務組件的依賴--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2022.0.0.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
2 子項目(test1)
pom
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>com.test</groupId> <artifactId>nacos_test</artifactId> <version>0.0.1-SNAPSHOT</version> </parent> <artifactId>test1</artifactId> <properties> <maven.compiler.source>17</maven.compiler.source> <maven.compiler.target>17</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!-- mybatis--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.4.1</version> </dependency> <!-- pojo持久化使用 --> <dependency> <groupId>jakarta.persistence</groupId> <artifactId>jakarta.persistence-api</artifactId> <version>3.1.0</version> </dependency> <!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j --> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <version>8.2.0</version> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <!-- 引入alibaba-nacos-config依賴,可以從Nacos配置中心獲得配置信息 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>4.0.4</version> </dependency> </dependencies> </project>
resource下,創建bootstrap.yml(不是application.yml)
這個yml會找到nacos中,我們前面創建的test.yml
server: port: 3000 spring: application: name: test1 cloud: nacos: discovery: server-addr: 127.0.0.1:8848 #註冊中心地址 namespace: local_test #命名空間 config: file-extension: yaml #文件後綴,只支持 properties 和 yaml prefix: test #文件名 namespace: local_test #命名空間 auto-refresh: true enable-remote-sync-config: true #啓用遠程同步配置 timeout: 3000 group: DEFAULT_GROUP #配置組 refresh-enabled: true server-addr: 127.0.0.1:8848 #配置中心地址
啓動項:
package com.test; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.cloud.openfeign.EnableFeignClients; @SpringBootApplication @EnableFeignClients @EnableDiscoveryClient public class Main { public static void main(String[] args) { SpringApplication.run(Main.class,args); } }
API:
package com.test.api; import com.alibaba.nacos.api.model.v2.Result; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("api/test") @RefreshScope public class ApiTestController { @Value("${name}") private String name; @RequestMapping(value = "test1", method = RequestMethod.GET) @ResponseBody public Result test1(){ return Result.success(name); } }
五,測試
訪問:http://localhost:3000/api/test/test1
結果:{"code":0,"message":"success","data":"hello wrold!!!"}
修改nacos中test.yml (無需重啓服務)
name: hello!!!
結果:{"code":0,"message":"success","data":"hello!!!"}