五、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的配置即可。





