springcloud-配置中心nacos

nacos的配置功能比springcloud原生的要强大,更简洁。

配置nacos

使用mysql持久化

  • 创建一个mysql数据库,例如create database nacos
  • nacos/cofn/nacos-mysql.sql中的sql语句在该数据库中执行。
  • 修改nacos/conf/application.properties,在文件之后追加

    1
    2
    3
    4
    5
    spring.datasource.platform=mysql
    db.num=1
    db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=GMT
    db.user=root
    db.password=xxxx
  • 启动nacosstartup.cmd

解决不支持mysql8.x的问题

  • clone 源码git clone https://github.com/alibaba/nacos.git
  • 修改nacos-all的pom文件中的依赖,将mysq-conncetor-java和cglib的版本升级
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <!-- JDBC libs -->
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.15</version>
    </dependency>
    <dependency>
    <groupId>cglib</groupId>
    <artifactId>cglib-nodep</artifactId>
    <version>2.2</version>
    </dependency>

-在nacos-naming 项目下找到com.alibaba.nacos.naming.healthcheck.MysqlHealthCheckProcessor修改 import com.mysql.jdbc.jdbc2.optional.MysqlDataSourceimport com.mysql.cj.jdbc.MysqlDataSource;

  • 打包mvn -Prelease-nacos clean install -U,输出的项目根目录\distribution\targe下的nacos即可使用

登录问题

生成加密密码BCryptPasswordEncoder().encode("密码"),注意盐值是随机的,所以生成密码每次可能不一样。

1
2
3
4
5
public class PasswordEncoderUtil {
public static void main(String[] args) {
System.out.println(new BCryptPasswordEncoder().encode("yourPawword"));
}
}

插入用户以及对应的密码的散列值

1
2
INSERT INTO users (username, password, enabled) VALUES ('nacos', '$2a$10$EuWPZHzz32dJN7jexM34MOeYirDdFAZm2kuWj7VEOJhhZkDrxfvUu', TRUE);
INSERT INTO roles (username, role) VALUES ('nacos', 'ROLE_ADMIN');

依赖

1
2
3
4
5
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>0.9.0.RELEASE</version>
</dependency>

配置文件

bootstrap.yaml,不能是application.yaml

1
2
3
4
5
6
7
8
9
spring:
application:
name: service
cloud:
nacos:
config:
server-addr: 127.0.0.1:8844
#配置文件的扩展名,支持yaml和properties
file-extension: yaml

之所以需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分。

在 Nacos Spring Cloud 中,dataId 的完整格式如下:

${prefix}-${spring.profile.active}.${file-extension}

prefix 默认为spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。

spring.profile.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。 注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成${prefix}.${file-extension}

file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 propertiesyaml 类型

发布于获取配置

发布

方法一:在web界面中创建dataId后直接编辑

方法二:执行POST请求curl -X POST "http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=service&group=DEFAULT_GROUP&content=useLocalCache=true

获取

curl -X GET http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=nacos.cfg.dataId&group=test

启动类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@RestController
@RequestMapping("/config")
@SpringBootApplication
public class ServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceApplication.class,args);
}

@Value("${useLocalCache:false}")
private boolean useLocalCache;

@RequestMapping("/get")
public boolean get() {
return useLocalCache;
}
}

依旧可以使用@RefreshScope实现自动刷新,比springcloud原生 config简单很多。

集群搭建

与nacos配置中心搭建时类似

nacos配置

  • 修改nacos/conf/applicaton.properties,这里使两个数据库作为准备模式

    1
    2
    3
    4
    5
    6
    spring.datasource.platform=mysql
    db.num=2
    db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=GMT
    db.url.1=jdbc:mysql://127.0.0.1:3306/nacos2?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&serverTimezone=GMT
    db.user=root
    db.password=root
  • 修改nacos/conf/cluster.conf,如果使用localhost或者127.0.0.1会出错;三台机器的ip:端口

    1
    2
    3
    10.xx.xx.23:8844
    10.xx.xx.23:8845
    10.xx.xx.23:8846
  • 启动每一台机器startup.cmd -m cluster,以集群模式启动。

配置文件

1
2
3
4
5
6
7
8
9
spring:
application:
name: service
cloud:
nacos:
config:
#所有节点的地址
server-addr: 127.0.0.1:8844,127.0.0.1:8845,127.0.0.1:8846
file-extension: yaml
文章作者: gentlezuo
文章链接: http://gentlezuo.github.io/2019/07/01/springcloud-配置中心nacos/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 gentlezuo的博客