说明

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施。

关键特性

  1. 服务发现和服务健康监测
  2. 动态配置服务

    安装 Nacos

    将压缩包解压至任意非中文目录下,如图
    SpringCloud_Nacos - 图1

    启动

    进入bin目录,结构如下:
    windows 版可以运行

    1. startup.cmd -m standalone

    SpringCloud_Nacos - 图2

    访问

    在浏览器输入地址:http://127.0.0.1:8848/nacos即可:
    SpringCloud_Nacos - 图3
    默认的账号和密码都是nacos,进入后:
    SpringCloud_Nacos - 图4

    注册中心

    Nacos与Eureka一样,都可以作为注册中心使用,并且Nacos实现了SpringCloudCommon中的一些接口,并且提供了对应的自动配置,这就让Nacos的注册中心使用与Eureka几乎一模一样,没有什么学习成本。

    搭建基础工程

    在 nacos-demo 基础工程(SpringCloud_RestTemplate.md 上有步骤)上进行测试
    SpringCloud_Nacos - 图5

    导入依赖

    为了统一管理SpringCloudAlibaba的组件版本,我们已经在父工程nacos-demo的pom文件中引入一个依赖,位置在<dependenciesManagement>下:
    这样,我们在引入alibaba的其它相关组件时就无需指定版本了。

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    5. <modelVersion>4.0.0</modelVersion>
    6. <groupId>com.itheima</groupId>
    7. <artifactId>nacos-demo</artifactId>
    8. <packaging>pom</packaging>
    9. <version>1.0-SNAPSHOT</version>
    10. <modules>
    11. <module>user-service</module>
    12. <module>consumer-service</module>
    13. </modules>
    14. <parent>
    15. <groupId>org.springframework.boot</groupId>
    16. <artifactId>spring-boot-starter-parent</artifactId>
    17. <version>2.2.10.RELEASE</version>
    18. <relativePath/>
    19. </parent>
    20. <properties>
    21. <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    22. <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    23. <java.version>1.8</java.version>
    24. <spring-cloud.version>Hoxton.SR8</spring-cloud.version>
    25. <spring-alibaba.version>2.2.1.RELEASE</spring-alibaba.version>
    26. <mysql.version>5.1.47</mysql.version>
    27. </properties>
    28. <dependencyManagement>
    29. <dependencies>
    30. <dependency>
    31. <groupId>com.alibaba.cloud</groupId>
    32. <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    33. <version>${spring-alibaba.version}</version>
    34. <type>pom</type>
    35. <scope>import</scope>
    36. </dependency>
    37. <!-- springCloud -->
    38. <dependency>
    39. <groupId>org.springframework.cloud</groupId>
    40. <artifactId>spring-cloud-dependencies</artifactId>
    41. <version>${spring-cloud.version}</version>
    42. <type>pom</type>
    43. <scope>import</scope>
    44. </dependency>
    45. <!-- mysql驱动 -->
    46. <dependency>
    47. <groupId>mysql</groupId>
    48. <artifactId>mysql-connector-java</artifactId>
    49. <version>${mysql.version}</version>
    50. </dependency>
    51. <!--mybatis-->
    52. <dependency>
    53. <groupId>org.mybatis.spring.boot</groupId>
    54. <artifactId>mybatis-spring-boot-starter</artifactId>
    55. <version>2.1.3</version>
    56. </dependency>
    57. </dependencies>
    58. </dependencyManagement>
    59. <dependencies>
    60. <dependency>
    61. <groupId>org.projectlombok</groupId>
    62. <artifactId>lombok</artifactId>
    63. </dependency>
    64. </dependencies>
    65. </project>

    user-service

    导入启动器

    1. <!--alibaba的 Nacos依赖-->
    2. <dependency>
    3. <groupId>com.alibaba.cloud</groupId>
    4. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    5. </dependency>
    6. <!--Spring的健康检测依赖-->
    7. <dependency>
    8. <groupId>org.springframework.boot</groupId>
    9. <artifactId>spring-boot-starter-actuator</artifactId>
    10. </dependency>

    配置 nacos 地址

    1. server:
    2. port: 8081
    3. spring:
    4. application:
    5. name: user-service
    6. datasource:
    7. driver-class-name: com.mysql.jdbc.Driver
    8. url: jdbc:mysql://192.168.206.99:3306/db2?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&useSSL=false
    9. username: root
    10. password: root
    11. cloud:
    12. nacos:
    13. discovery:
    14. server-addr: 127.0.0.1:8848 # nacos服务地址
    15. mybatis:
    16. type-aliases-package: com.itheima.pojo
    17. configuration:
    18. map-underscore-to-camel-case: true
    19. logging:
    20. level:
    21. com.itheima: debug

    consumer-service

    导入启动器

    1. <!--alibaba的 Nacos依赖-->
    2. <dependency>
    3. <groupId>com.alibaba.cloud</groupId>
    4. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    5. </dependency>
    6. <!--Spring的健康检测依赖-->
    7. <dependency>
    8. <groupId>org.springframework.boot</groupId>
    9. <artifactId>spring-boot-starter-actuator</artifactId>
    10. </dependency>

    配置nacos地址

    1. spring:
    2. application:
    3. name: consumer
    4. cloud:
    5. nacos:
    6. discovery:
    7. server-addr: 127.0.0.1:8848 # nacos服务地址
    8. server:
    9. port: 8085

    添加Ribbon负载均衡

    1. package com.itheima;
    2. import org.springframework.boot.SpringApplication;
    3. import org.springframework.boot.autoconfigure.SpringBootApplication;
    4. import org.springframework.cloud.client.loadbalancer.LoadBalanced;
    5. import org.springframework.context.annotation.Bean;
    6. import org.springframework.web.client.RestTemplate;
    7. @SpringBootApplication
    8. public class ConsumerApplication {
    9. public static void main(String[] args) {
    10. SpringApplication.run(ConsumerApplication.class, args);
    11. }
    12. @Bean
    13. @LoadBalanced
    14. public RestTemplate restTemplate(){
    15. return new RestTemplate();
    16. }
    17. }

    使用服务名代替硬编码路径

    1. package com.itheima.web;
    2. import com.itheima.pojo.User;
    3. import org.springframework.beans.factory.annotation.Autowired;
    4. import org.springframework.web.bind.annotation.GetMapping;
    5. import org.springframework.web.bind.annotation.PathVariable;
    6. import org.springframework.web.bind.annotation.RequestMapping;
    7. import org.springframework.web.bind.annotation.RestController;
    8. import org.springframework.web.client.RestTemplate;
    9. @RestController
    10. @RequestMapping("consumer")
    11. public class ConsumerController {
    12. @Autowired
    13. private RestTemplate restTemplate;
    14. @GetMapping("{id}")
    15. public User consumerUserById(@PathVariable("id") Long id){
    16. // String url = "http://127.0.0.1:8081/user/"+id;
    17. String url = "http://user-service/user/"+id;
    18. return restTemplate.getForObject(url,User.class);
    19. }
    20. }

    重启 user-service、consumer-service服务,然后去访问Nacos的页面:http://127.0.0.1:8848/nacos可以发现:
    SpringCloud_Nacos - 图6

    开启 feign 支持

    在consumer-service服务导入Feign启动器

    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <project xmlns="http://maven.apache.org/POM/4.0.0"
    3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    5. <parent>
    6. <artifactId>nacos-demo</artifactId>
    7. <groupId>com.itheima</groupId>
    8. <version>1.0-SNAPSHOT</version>
    9. </parent>
    10. <modelVersion>4.0.0</modelVersion>
    11. <artifactId>consumer-service</artifactId>
    12. <dependencies>
    13. <dependency>
    14. <groupId>org.springframework.boot</groupId>
    15. <artifactId>spring-boot-starter-web</artifactId>
    16. </dependency>
    17. <!--alibaba的 Nacos依赖-->
    18. <dependency>
    19. <groupId>com.alibaba.cloud</groupId>
    20. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    21. </dependency>
    22. <!--Spring的健康检测依赖-->
    23. <dependency>
    24. <groupId>org.springframework.boot</groupId>
    25. <artifactId>spring-boot-starter-actuator</artifactId>
    26. </dependency>
    27. <!-- Feign启动器 -->
    28. <dependency>
    29. <groupId>org.springframework.cloud</groupId>
    30. <artifactId>spring-cloud-starter-openfeign</artifactId>
    31. </dependency>
    32. </dependencies>
    33. <build>
    34. <plugins>
    35. <plugin>
    36. <groupId>org.springframework.boot</groupId>
    37. <artifactId>spring-boot-maven-plugin</artifactId>
    38. </plugin>
    39. </plugins>
    40. </build>
    41. </project>

    开启Feign客户端支持

    1. package com.itheima;
    2. import org.springframework.boot.SpringApplication;
    3. import org.springframework.boot.autoconfigure.SpringBootApplication;
    4. import org.springframework.cloud.client.loadbalancer.LoadBalanced;
    5. import org.springframework.cloud.openfeign.EnableFeignClients;
    6. import org.springframework.context.annotation.Bean;
    7. import org.springframework.web.client.RestTemplate;
    8. @SpringBootApplication
    9. @EnableFeignClients
    10. public class ConsumerApplication {
    11. public static void main(String[] args) {
    12. SpringApplication.run(ConsumerApplication.class, args);
    13. }
    14. @Bean
    15. @LoadBalanced
    16. public RestTemplate restTemplate(){
    17. return new RestTemplate();
    18. }
    19. }

    提供Feign客户端接口

    1. package com.itheima.feign;
    2. import com.itheima.pojo.User;
    3. import org.springframework.cloud.openfeign.FeignClient;
    4. import org.springframework.stereotype.Component;
    5. import org.springframework.web.bind.annotation.GetMapping;
    6. import org.springframework.web.bind.annotation.PathVariable;
    7. @FeignClient("user-service")
    8. @Component
    9. public interface UserClient {
    10. @GetMapping("/user/{id}")
    11. User queryById(@PathVariable("id") Long id);
    12. }

    在Controller中使用Feign客户端进行远程调用

    1. package com.itheima.web;
    2. import com.itheima.feign.UserClient;
    3. import com.itheima.pojo.User;
    4. import org.springframework.beans.factory.annotation.Autowired;
    5. import org.springframework.web.bind.annotation.GetMapping;
    6. import org.springframework.web.bind.annotation.PathVariable;
    7. import org.springframework.web.bind.annotation.RequestMapping;
    8. import org.springframework.web.bind.annotation.RestController;
    9. @RestController
    10. @RequestMapping("consumer")
    11. public class ConsumerController {
    12. @Autowired
    13. private UserClient userClient;
    14. @GetMapping("{id}")
    15. public User consumerUserById(@PathVariable("id") Long id){
    16. User user = userClient.queryById(id);
    17. return user;
    18. }
    19. }

    重启consumer-service,然后在浏览器测试:
    http://localhost:8085/consumer/6
    SpringCloud_Nacos - 图7

    分布式配置中心

    在微服务架构下,每个服务都会都会有自己的配置文件,此时传统的配置文件方式则会造成诸多问题:

  • 时效性:修改配置,需要重启服务才能生效。
  • 局限性:无法支持动态调整,如服务地址修改。

因此,分布式配置中心应运而生。其为所有的微服务提供了一个中心化的外部配置环境, 服务的配置信息都可以存放到分布式配置上,从而解决如上的诸多问题。
SpringCloud_Nacos - 图8

导入依赖

修改 user-service中pom文件,添加nacos配置中心依赖

  1. <!--nacos-config-->
  2. <dependency>
  3. <groupId>com.alibaba.cloud</groupId>
  4. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  5. </dependency>

新建命名空间

点击新建命名空间
SpringCloud_Nacos - 图9
填写命名空间名,描述,点击确定
SpringCloud_Nacos - 图10
完成
SpringCloud_Nacos - 图11

新建配置

切换到自己的命名空间下,点击加号进行添加配置
SpringCloud_Nacos - 图12
填写 Data ID(需要与服务名一致),Group默认就好了,描述,配置格式选YAML,配置内容即可
SpringCloud_Nacos - 图13
新建配置完成
SpringCloud_Nacos - 图14

添加配置中心地址

将application.yml修改为bootstrap.yml,因为bootstrap.yml 先于 application.yml加载

  1. server:
  2. port: 8081
  3. spring:
  4. application:
  5. name: user-service
  6. datasource:
  7. driver-class-name: com.mysql.jdbc.Driver
  8. url: jdbc:mysql://192.168.206.99:3306/db2?useUnicode=true&characterEncoding=utf8&allowMultiQueries=true&useSSL=false
  9. username: root
  10. password: root
  11. cloud:
  12. nacos:
  13. config: # nacos配置中心地址
  14. namespace: 37215687-3232-4473-90df-ca71896b1889 # 命名空间id
  15. server-addr: 127.0.0.1:8848
  16. file-extension: yaml
  17. discovery:
  18. server-addr: 127.0.0.1:8848 # nacos服务地址
  19. mybatis:
  20. type-aliases-package: com.itheima.pojo
  21. configuration:
  22. map-underscore-to-camel-case: true
  23. logging:
  24. level:
  25. com.itheima: debug

获取配置中心内容

修改 UserController,获取配置中心内容

  1. package com.itheima.web;
  2. import com.itheima.pojo.User;
  3. import com.itheima.service.UserService;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.beans.factory.annotation.Value;
  6. import org.springframework.web.bind.annotation.GetMapping;
  7. import org.springframework.web.bind.annotation.PathVariable;
  8. import org.springframework.web.bind.annotation.RequestMapping;
  9. import org.springframework.web.bind.annotation.RestController;
  10. @RestController
  11. @RequestMapping("user")
  12. public class UserController {
  13. @Autowired
  14. private UserService userService;
  15. @Value("${jack}")
  16. private String name;
  17. @GetMapping("{id}")
  18. public User queryById(@PathVariable("id") Long id){
  19. return userService.queryById(id);
  20. }
  21. @GetMapping("hello")
  22. public String hello(){
  23. return name;
  24. }
  25. }

访问

重启 user-service 服务,http://localhost:8081/user/hello,查看效果
SpringCloud_Nacos - 图15

动态刷新

当修改配置中心内容后,项目中并不能得到及时更新。 此时就需要配置动态刷新。实现方式非常简单,只需要在需要获取配置中心内容的Controller上添加@RefreshScope即可。
在UserController修改

  1. package com.itheima.web;
  2. import com.itheima.pojo.User;
  3. import com.itheima.service.UserService;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.beans.factory.annotation.Value;
  6. import org.springframework.cloud.context.config.annotation.RefreshScope;
  7. import org.springframework.web.bind.annotation.GetMapping;
  8. import org.springframework.web.bind.annotation.PathVariable;
  9. import org.springframework.web.bind.annotation.RequestMapping;
  10. import org.springframework.web.bind.annotation.RestController;
  11. @RestController
  12. @RefreshScope
  13. @RequestMapping("user")
  14. public class UserController {
  15. @Autowired
  16. private UserService userService;
  17. @Value("${jack}")
  18. private String name;
  19. @GetMapping("{id}")
  20. public User queryById(@PathVariable("id") Long id){
  21. return userService.queryById(id);
  22. }
  23. @GetMapping("hello")
  24. public String hello(){
  25. return name;
  26. }
  27. }

重启服务,可以测试,重启之后,再次修改配置中心中user-service配置内容,此时,无需再次启动服务,直接浏览器刷新即可
SpringCloud_Nacos - 图16
刷新浏览器,可以直接看到效果
SpringCloud_Nacos - 图17

多环境切换

项目开发过程中,可能会存在多种环境,并且每一种环境所设置的配置都是不同的。nacos可以同时支持多环境配置。只需要在nacos配置中心中根据dataId进行区分即可。dataId 完整的拼接格式如下:

  1. ${prefix}-${spring.profiles.active}.${file-extension}
  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profiles.active 即为当前环境对应的 profile
  • file-extension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension来配置。

在nacos配置中心上新建配置文件consumer-dev.yml、consumer-prod.yml
consumer-dev.yml:

  1. server:
  2. port: 8085
  3. spring:
  4. cloud:
  5. nacos:
  6. discovery:
  7. server-addr: 127.0.0.1:8848 # nacos服务地址
  8. management:
  9. endpoints:
  10. web:
  11. exposure:
  12. include: "*" # 暴露健康检测的接口

SpringCloud_Nacos - 图18
consumer-prod.yml:

  1. server:
  2. port: 8082
  3. spring:
  4. cloud:
  5. nacos:
  6. discovery:
  7. server-addr: 127.0.0.1:8848 # nacos服务地址
  8. management:
  9. endpoints:
  10. web:
  11. exposure:
  12. include: "*" # 暴露健康检测的接口

SpringCloud_Nacos - 图19
新建完成
SpringCloud_Nacos - 图20
修改 consumer-service pom文件,引入依赖

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <parent>
  6. <artifactId>nacos-demo</artifactId>
  7. <groupId>com.itheima</groupId>
  8. <version>1.0-SNAPSHOT</version>
  9. </parent>
  10. <modelVersion>4.0.0</modelVersion>
  11. <artifactId>consumer-service</artifactId>
  12. <dependencies>
  13. <dependency>
  14. <groupId>org.springframework.boot</groupId>
  15. <artifactId>spring-boot-starter-web</artifactId>
  16. </dependency>
  17. <!--nacos-config-->
  18. <dependency>
  19. <groupId>com.alibaba.cloud</groupId>
  20. <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
  21. </dependency>
  22. <!--alibaba的 Nacos依赖-->
  23. <dependency>
  24. <groupId>com.alibaba.cloud</groupId>
  25. <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  26. </dependency>
  27. <!--Spring的健康检测依赖-->
  28. <dependency>
  29. <groupId>org.springframework.boot</groupId>
  30. <artifactId>spring-boot-starter-actuator</artifactId>
  31. </dependency>
  32. <!-- Feign启动器 -->
  33. <dependency>
  34. <groupId>org.springframework.cloud</groupId>
  35. <artifactId>spring-cloud-starter-openfeign</artifactId>
  36. </dependency>
  37. </dependencies>
  38. <build>
  39. <plugins>
  40. <plugin>
  41. <groupId>org.springframework.boot</groupId>
  42. <artifactId>spring-boot-maven-plugin</artifactId>
  43. </plugin>
  44. </plugins>
  45. </build>
  46. </project>

修改consumer-service服务的bootstrap.yml

  1. spring:
  2. application:
  3. name: consumer
  4. cloud:
  5. nacos:
  6. config:
  7. namespace: 37215687-3232-4473-90df-ca71896b1889
  8. server-addr: 127.0.0.1:8848
  9. file-extension: yml
  10. discovery:
  11. server-addr: 127.0.0.1:8848 # nacos注册中心地址
  12. profiles:
  13. active: prod # 激活Prod配置文件
  14. management:
  15. endpoints:
  16. web:
  17. exposure:
  18. include: "*" # 暴露健康检测的接口

启动 consumer-service 服务测试
发现端口为8082
SpringCloud_Nacos - 图21

通用配置环境设置

在开发中,虽然可以在不同环境下使用不同的配置文件,但是有一些配置是通用的,需要在不同的环境下,都进行生效。
在consumer-service服务中,不同的开发环境下都会去加载consumer-service.yml,也就是没有指定特定环境的文件。那么对于通用配置就可以设置在这个文件中。
还可以新建一个 tongyong.yml 配置文件
SpringCloud_Nacos - 图22
在 consumer-service 的 bootstrap.yml中修改为如下

  1. spring:
  2. application:
  3. name: consumer
  4. cloud:
  5. nacos:
  6. config:
  7. namespace: 37215687-3232-4473-90df-ca71896b1889
  8. server-addr: 127.0.0.1:8848
  9. file-extension: yml
  10. shared-configs: tongyong.yml
  11. discovery:
  12. server-addr: 127.0.0.1:8848 # nacos注册中心地址
  13. profiles:
  14. active: prod # 激活Prod配置文件
  15. management:
  16. endpoints:
  17. web:
  18. exposure:
  19. include: "*" # 暴露健康检测的接口

可以修改,ConsumerController

  1. package com.itheima.web;
  2. import com.itheima.feign.UserClient;
  3. import com.itheima.pojo.User;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.beans.factory.annotation.Value;
  6. import org.springframework.web.bind.annotation.GetMapping;
  7. import org.springframework.web.bind.annotation.PathVariable;
  8. import org.springframework.web.bind.annotation.RequestMapping;
  9. import org.springframework.web.bind.annotation.RestController;
  10. @RestController
  11. @RequestMapping("consumer")
  12. public class ConsumerController {
  13. @Autowired
  14. private UserClient userClient;
  15. @Value("${year}")
  16. private String year;
  17. @GetMapping("{id}")
  18. public User consumerUserById(@PathVariable("id") Long id){
  19. User user = userClient.queryById(id);
  20. return user;
  21. }
  22. @GetMapping("hello")
  23. public String hello(){
  24. return year;
  25. }
  26. }

重启服务,访问浏览器,http://localhost:8082/consumer/hello,查看效果
SpringCloud_Nacos - 图23

配置持久化(*)

当我们使用默认配置启动Nacos时,所有配置的信息都被Nacos保存在了内嵌数据库derby中。会存在以下问题:

  1. 使用内嵌数据库,注定会有存储上限
  2. 不适合集群,分布式环境
  3. 不方便观察数据存储的基本情况

0.7版本之后增加了支持mysql数据源能力,也是工作里面常用的方式。
修改 conf/application.properties 配置文件

  1. ### Count of DB:
  2. db.num=1
  3. ### Connect URL of DB:
  4. db.url.0=jdbc:mysql://192.168.206.99:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
  5. db.user=root
  6. db.password=root

执行下面 sql

  1. CREATE DATABASE nacos;
  2. USE nacos;
  3. /******************************************/
  4. /* 数据库全名 = nacos_config */
  5. /* 表名称 = config_info */
  6. /******************************************/
  7. CREATE TABLE `config_info` (
  8. `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  9. `data_id` VARCHAR(255) NOT NULL COMMENT 'data_id',
  10. `group_id` VARCHAR(255) DEFAULT NULL,
  11. `content` LONGTEXT NOT NULL COMMENT 'content',
  12. `md5` VARCHAR(32) DEFAULT NULL COMMENT 'md5',
  13. `gmt_create` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  14. `gmt_modified` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  15. `src_user` TEXT COMMENT 'source user',
  16. `src_ip` VARCHAR(20) DEFAULT NULL COMMENT 'source ip',
  17. `app_name` VARCHAR(128) DEFAULT NULL,
  18. `tenant_id` VARCHAR(128) DEFAULT '' COMMENT '租户字段',
  19. `c_desc` varchar(256) DEFAULT NULL,
  20. `c_use` varchar(64) DEFAULT NULL,
  21. `effect` varchar(64) DEFAULT NULL,
  22. `type` varchar(64) DEFAULT NULL,
  23. `c_schema` text,
  24. PRIMARY KEY (`id`),
  25. UNIQUE KEY `uk_configinfo_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
  26. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info';
  27. /******************************************/
  28. /* 数据库全名 = nacos_config */
  29. /* 表名称 = config_info_aggr */
  30. /******************************************/
  31. CREATE TABLE `config_info_aggr` (
  32. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  33. `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  34. `group_id` varchar(255) NOT NULL COMMENT 'group_id',
  35. `datum_id` varchar(255) NOT NULL COMMENT 'datum_id',
  36. `content` longtext NOT NULL COMMENT '内容',
  37. `gmt_modified` datetime NOT NULL COMMENT '修改时间',
  38. `app_name` varchar(128) DEFAULT NULL,
  39. `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  40. PRIMARY KEY (`id`),
  41. UNIQUE KEY `uk_configinfoaggr_datagrouptenantdatum` (`data_id`,`group_id`,`tenant_id`,`datum_id`)
  42. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='增加租户字段';
  43. /******************************************/
  44. /* 数据库全名 = nacos_config */
  45. /* 表名称 = config_info_beta */
  46. /******************************************/
  47. CREATE TABLE `config_info_beta` (
  48. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  49. `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  50. `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  51. `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  52. `content` longtext NOT NULL COMMENT 'content',
  53. `beta_ips` varchar(1024) DEFAULT NULL COMMENT 'betaIps',
  54. `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  55. `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  56. `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  57. `src_user` text COMMENT 'source user',
  58. `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
  59. `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  60. PRIMARY KEY (`id`),
  61. UNIQUE KEY `uk_configinfobeta_datagrouptenant` (`data_id`,`group_id`,`tenant_id`)
  62. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_beta';
  63. /******************************************/
  64. /* 数据库全名 = nacos_config */
  65. /* 表名称 = config_info_tag */
  66. /******************************************/
  67. CREATE TABLE `config_info_tag` (
  68. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  69. `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  70. `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  71. `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  72. `tag_id` varchar(128) NOT NULL COMMENT 'tag_id',
  73. `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  74. `content` longtext NOT NULL COMMENT 'content',
  75. `md5` varchar(32) DEFAULT NULL COMMENT 'md5',
  76. `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  77. `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  78. `src_user` text COMMENT 'source user',
  79. `src_ip` varchar(20) DEFAULT NULL COMMENT 'source ip',
  80. PRIMARY KEY (`id`),
  81. UNIQUE KEY `uk_configinfotag_datagrouptenanttag` (`data_id`,`group_id`,`tenant_id`,`tag_id`)
  82. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_info_tag';
  83. /******************************************/
  84. /* 数据库全名 = nacos_config */
  85. /* 表名称 = config_tags_relation */
  86. /******************************************/
  87. CREATE TABLE `config_tags_relation` (
  88. `id` bigint(20) NOT NULL COMMENT 'id',
  89. `tag_name` varchar(128) NOT NULL COMMENT 'tag_name',
  90. `tag_type` varchar(64) DEFAULT NULL COMMENT 'tag_type',
  91. `data_id` varchar(255) NOT NULL COMMENT 'data_id',
  92. `group_id` varchar(128) NOT NULL COMMENT 'group_id',
  93. `tenant_id` varchar(128) DEFAULT '' COMMENT 'tenant_id',
  94. `nid` bigint(20) NOT NULL AUTO_INCREMENT,
  95. PRIMARY KEY (`nid`),
  96. UNIQUE KEY `uk_configtagrelation_configidtag` (`id`,`tag_name`,`tag_type`),
  97. KEY `idx_tenant_id` (`tenant_id`)
  98. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='config_tag_relation';
  99. /******************************************/
  100. /* 数据库全名 = nacos_config */
  101. /* 表名称 = group_capacity */
  102. /******************************************/
  103. CREATE TABLE `group_capacity` (
  104. `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  105. `group_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Group ID,空字符表示整个集群',
  106. `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  107. `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  108. `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  109. `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数,,0表示使用默认值',
  110. `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  111. `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  112. `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  113. `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  114. PRIMARY KEY (`id`),
  115. UNIQUE KEY `uk_group_id` (`group_id`)
  116. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='集群、各Group容量信息表';
  117. /******************************************/
  118. /* 数据库全名 = nacos_config */
  119. /* 表名称 = his_config_info */
  120. /******************************************/
  121. CREATE TABLE `his_config_info` (
  122. `id` bigint(64) unsigned NOT NULL,
  123. `nid` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  124. `data_id` varchar(255) NOT NULL,
  125. `group_id` varchar(128) NOT NULL,
  126. `app_name` varchar(128) DEFAULT NULL COMMENT 'app_name',
  127. `content` longtext NOT NULL,
  128. `md5` varchar(32) DEFAULT NULL,
  129. `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  130. `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  131. `src_user` text,
  132. `src_ip` varchar(20) DEFAULT NULL,
  133. `op_type` char(10) DEFAULT NULL,
  134. `tenant_id` varchar(128) DEFAULT '' COMMENT '租户字段',
  135. PRIMARY KEY (`nid`),
  136. KEY `idx_gmt_create` (`gmt_create`),
  137. KEY `idx_gmt_modified` (`gmt_modified`),
  138. KEY `idx_did` (`data_id`)
  139. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='多租户改造';
  140. /******************************************/
  141. /* 数据库全名 = nacos_config */
  142. /* 表名称 = tenant_capacity */
  143. /******************************************/
  144. CREATE TABLE `tenant_capacity` (
  145. `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  146. `tenant_id` varchar(128) NOT NULL DEFAULT '' COMMENT 'Tenant ID',
  147. `quota` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '配额,0表示使用默认值',
  148. `usage` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '使用量',
  149. `max_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个配置大小上限,单位为字节,0表示使用默认值',
  150. `max_aggr_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '聚合子配置最大个数',
  151. `max_aggr_size` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '单个聚合数据的子配置大小上限,单位为字节,0表示使用默认值',
  152. `max_history_count` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '最大变更历史数量',
  153. `gmt_create` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  154. `gmt_modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '修改时间',
  155. PRIMARY KEY (`id`),
  156. UNIQUE KEY `uk_tenant_id` (`tenant_id`)
  157. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='租户容量信息表';
  158. CREATE TABLE `tenant_info` (
  159. `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
  160. `kp` varchar(128) NOT NULL COMMENT 'kp',
  161. `tenant_id` varchar(128) default '' COMMENT 'tenant_id',
  162. `tenant_name` varchar(128) default '' COMMENT 'tenant_name',
  163. `tenant_desc` varchar(256) DEFAULT NULL COMMENT 'tenant_desc',
  164. `create_source` varchar(32) DEFAULT NULL COMMENT 'create_source',
  165. `gmt_create` bigint(20) NOT NULL COMMENT '创建时间',
  166. `gmt_modified` bigint(20) NOT NULL COMMENT '修改时间',
  167. PRIMARY KEY (`id`),
  168. UNIQUE KEY `uk_tenant_info_kptenantid` (`kp`,`tenant_id`),
  169. KEY `idx_tenant_id` (`tenant_id`)
  170. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT='tenant_info';
  171. CREATE TABLE `users` (
  172. `username` varchar(50) NOT NULL PRIMARY KEY,
  173. `password` varchar(500) NOT NULL,
  174. `enabled` boolean NOT NULL
  175. );
  176. CREATE TABLE `roles` (
  177. `username` varchar(50) NOT NULL,
  178. `role` varchar(50) NOT NULL,
  179. UNIQUE INDEX `idx_user_role` (`username` ASC, `role` ASC) USING BTREE
  180. );
  181. CREATE TABLE `permissions` (
  182. `role` varchar(50) NOT NULL,
  183. `resource` varchar(255) NOT NULL,
  184. `action` varchar(8) NOT NULL,
  185. UNIQUE INDEX `uk_role_permission` (`role`,`resource`,`action`) USING BTREE
  186. );
  187. INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);
  188. INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');

效果
SpringCloud_Nacos - 图24
。。。。。。
demo
nacos-demo