暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

SpringCloud-Alibaba:nacos-4 配置中心

Coding On Road 2020-09-15
430

五、Nacos 配置中心

 

Spring boot读取nacos配置中心配置信息。

springboot的配置文件加载顺序为:

bootstrap.properties

application.properties

由于nacos config需要首先加载远程的配置,所以必须要将nacos配置中心信息配置到bootstrap.properties文件中。

bootstrap.properties -> bootstrap.yml -> application.properties -> application.yml ,其中 bootstrap.properties 配置为最高优先级


1、快速入门

1、创建项目

创建项目,注意选择nacos configuration项:

 


 

主要就是添加了以下配置:

<dependency>

<groupId>com.alibaba.cloud</groupId>

<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>

</dependency>

 

 

2、添加配置

nacos的配置处添加以下配置:

 


 

配置好以后:

 


 

3、修改项目的配置文件

项目的bootstrap.yml文件内容如下:

server:

  port: 7901

spring:

  cloud:

    nacos:

      server-addr: 192.168.56.10:8848

      discovery:  #声明自己当前这个客户端的IP的端口

        ip: 192.168.56.1

        port: ${server.port}

      username: nacos

      password: nacos

      config:

        file-extension: properties #默认就是properties - 组成名称为:${spring.application.name}.{$file-extension}的文件 dataId

        group: DEFAULT_GROUP  #默认就是DEFAULT_GROUP

        #namespace: public    #默认就是public,如果是public则不需要指定

  application:

    name: nacos-config  #必须要拥有这个名称

 

4、测试页面获取数据

浏览器直接访问不能被动态修改的:(关闭程序后,重新启动将会获取新的数据)

 


修改配置的值以后:

浏览器访问可以动态获取配置的:

 


 

 

2、使用配置中心配置数据库连接

 

1、配置nacos

nacos中配置以下信息:主要是配置数据库连接信息:

 


 

完整的数据如下:

Data ID=nacos.config

Group = DEFAULT_GROUP

配置格式=Properties

内容:

user.name=张三

user.age=55

spring.datasource.url=jdbc:mysql://localhost:3306/demo?characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&useSSL=false

spring.datasource.username=root

spring.datasource.password=123456

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.datasource.type=com.zaxxer.hikari.HikariDataSource

spring.datasource.hikari.maximum-pool-size=3

spring.datasource.hikari.max-lifetime=3000

logging.level.root=INFO

logging.file.name=./logs/${spring.application.name}.log

 

 

2、查看项目中bootstrap.yml内容如下

以下配置与之前的nacos-config项目的配置完全相同,除修改了nacos的密码之外,其他没有做任何的修改:

server:

  port: 7901

spring:

  cloud:

    nacos:

      server-addr: 192.168.56.10:8848

      discovery:  #声明自己当前这个客户端的IP的端口

        ip: 192.168.56.1

        port: ${server.port}

      username: nacos

      password: 123456

      config:

        file-extension: properties #默认就是properties - 组成名称为:${spring.application.name}.{$file-extension}的文件 dataId

        group: DEFAULT_GROUP  #默认就是DEFAULT_GROUP

        #namespace: public    #默认就是public,如果是public则不需要指定

  application:

name: nacos-config  #必须要拥有这个名称

 

3、添加连接数据库的依赖

   <dependency>

<groupId>mysql</groupId>

<artifactId>mysql-connector-java</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-jdbc</artifactId>

</dependency>

 

 

4、添加数据库访问测试

 


package cn.nacos.api.demo.service;

import java.sql.Connection;

import java.util.List;

import java.util.Map;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.jdbc.core.JdbcTemplate;

import org.springframework.stereotype.Service;

import lombok.extern.slf4j.Slf4j;

@Slf4j

@Service

public class DemoService {

@Autowired

private DataSource dataSource;

public void show() {

log.info("Hello Demo Service.");

log.info("DataSource is:"+dataSource);

try {

Connection con = dataSource.getConnection();

log.info("获取到的连接为:"+con);

con.close();

}catch(Exception e) {

e.printStackTrace();

}

}

/**

 * 查询所有数据

 * @return

 */

public List<Map<String,Object>> list(){

JdbcTemplate jt = new JdbcTemplate(dataSource);

String sql = "select id,name,age from t_stud";

List<Map<String,Object>> list =

jt.queryForList(sql);

return list;

}

}

 

控制器:

package cn.nacos.api.demo.controller;

import java.util.List;

import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.web.bind.annotation.GetMapping;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RestController;

import cn.nacos.api.demo.service.DemoService;

import lombok.extern.slf4j.Slf4j;

@Slf4j

@RestController

@RequestMapping("demo")

public class DemoController {

@Autowired

private DemoService demoService;

@GetMapping("show")

public String demo() {

demoService.show();

return "hello demo.service";

}

/**

 * 测试查询所有

 */

@GetMapping("list")

public List<Map<String,Object>> list(){

List<Map<String,Object>> list =

demoService.list();

log.info("查询数量为:"+list.size());

return list;

}

}


 

5、测试访问

如果查询,返回了以下数据表查询结果,则说明在nacos上的配置都成功:

 


 

OK,运行成功。

 

 

3、配置和指定namespace

nacos中可以创建一个新的namespace,新的namespace用于与其他的namespace实现完全的隔离。

关于nacos的数据模型,可以参考:

https://www.cnblogs.com/nijunyang/p/12313572.html

 

Nacos 数据模型 Key 由三元组唯一确定, Namespace默认是空串,公共命名空间(public),分组默认是 DEFAULT_GROUP




以上都是nacos官网上面的图片及描述,综合一下应该是这个样子


 

1、创建一个新的命名空间如下

 


注意,其中的命名空间ID,如果在声明时没有设置,则会自动生成的UUID

 

2、dev命名空间下,添加以下配置

现在在dev命名空间下,添加以下配置信息:

 


3、springcloud的项目中添加以下配置

修改项目的application.yml配置文件,注意namespace的值和group的值:

server:

  port: 7901

spring:

  cloud:

    nacos:

      server-addr: 192.168.56.10:8848

      discovery:  #声明自己当前这个客户端的IP的端口

        ip: 192.168.56.1

        port: ${server.port}

      username: nacos

      password: 123456

      config:

        file-extension: properties #默认就是properties - 组成名称为:${spring.application.name}.{$file-extension}的文件 dataId

        group: TEST_GROUP  #默认就是DEFAULT_GROUP

        namespace: ddc750c1-3f36-4d44-93c5-6945f4df86cc    #默认就是public,如果是public则不需要指定

  application:

    name: nacos-config  #必须要拥有这个名称

 

4、启动测试

启动测试,查看是否发获取的是dev命名空间下nacos-config.properties的配置即可。

 


 


文章转载自Coding On Road,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论