SpringCloud配置中心nacos

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

配置nacos

使用mysql持久化

  • 创建一个mysql数据库,例如create database nacos
  • nacos/cofn/nacos-mysql.sql中的sql语句在该数据库中执行。
  • 修改nacos/conf/application.properties,在文件之后追加
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的版本升级
<!-- 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("密码"),注意盐值是随机的,所以生成密码每次可能不一样。

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

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

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

依赖

<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

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

启动类

@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,这里使两个数据库作为准备模式
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:端口
10.xx.xx.23:8844
10.xx.xx.23:8845
10.xx.xx.23:8846
  • 启动每一台机器startup.cmd -m cluster,以集群模式启动。

配置文件

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

猜你喜欢

转载自blog.csdn.net/gentlezuo/article/details/107727598
今日推荐