当前位置:   article > 正文

三.Nacos_nacos 配置数据库

nacos 配置数据库

本文档中的Nacos为Alibaba Nacos

目录

1.Nacos基本概念

2.Nacos安装

3.Nacos集成SpringBoot实现服务注册与发现

3.1 在pom中添加依赖

3.2 在application.yml中配置如下信息

3.3 将RestTemplate注册到Ioc容器中

3.4 配置服务提供者和消费者

领域模型:

4.Nacos实现统一配置管理

4.1基础概念及配置

4.1.1⬇️ 在项目中添加依赖

4.1.2⬇️ 在配置文件中添加config相关属性

application.yml和bootstrap.yml的区别

4.1.3⬇️ 在Nacos配置中心添加配置文件

4.1.4▶️ 在Nacos中的配置文件中添加属性

4.1.5 热更新

4.2.6 配置文件的切换

4.2.7 配置数据库

4.2.7.1⬇️ 添加Mysql数据库

4.2.7.2⬇️ 转储sql文件

4.2.7.3▶️ 修改配置文件

4.2 Nacos集群模式

4.2.1⬇️ 模拟集群环境

4.2.2⬇️修改配置文件

4.2.3▶️运行即可


1.Nacos基本概念

Nacos是阿里巴巴推出来的一个新开源项目,致力于帮助发现,配置和管理微服务.Nacos提供了一组简单易用的特性集,帮助快速实现动态服务发现,服务配置,服务元数据,及流量管理

Nacos是以服务为主要服务对象的中间件,Nacos支持所有主流的服务发现,配置和管理,Nacos主要提供以下四个功能:

  • 服务发现和服务健康检测
  • 动态配置服务
  • 动态DNS服务
  • 服务及其元数据管理

nacos服务客户端(要注册到nacos的服务)启动时会每隔一段时间(默认5秒)向nacos发生心跳包,nacos注册中心15秒内没有检测到心跳包会默认认为nacos处于一种不健康的状态,30秒还没收到则认为这个服务已不可用。

2.Nacos安装

下载链接

将文件夹直接拷贝到指定盘(路径不能有中文),随后修改bin目录下的startup.cmd文件,集群模式改为单机模式

set MODE="cluster"修改为set MODE="standalone"

保存后单击此文件运行即可

启动后,直接在浏览器访问 localhost:8848/nacos,账号密码都是nacos

3.Nacos集成SpringBoot实现服务注册与发现

3.1 在pom中添加依赖

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

3.2 在application.yml中配置如下信息

  1. spring:
  2. cloud:
  3. nacos:
  4. discovery:
  5. server-addr: localhost:8848
  6. # 因部分本机可能安装了VMware虚拟机,因此可能不止一个网卡,所以需指定ip,如果没有则不需指定
  7. ip: 127.0.0.1

3.3 将RestTemplate注册到Ioc容器中

  1. @Bean
  2. @LoadBalanced
  3. RestTemplate restTemplate() {
  4. return new RestTemplate();
  5. }

3.4 配置服务提供者和消费者

服务提供者:

  1. package com.bdqn.qianmo.user.controller;
  2. import com.bdqn.beans.User;
  3. import com.bdqn.qianmo.user.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. UserService userService;
  15. @Value("${server.port}")
  16. int port;
  17. @GetMapping("/{id}")
  18. public User getUserById(@PathVariable Long id) {
  19. System.out.println("port: "+port);
  20. return userService.getById(id);
  21. }
  22. }

服务消费者:

  1. package com.bdqn.qianmo.order.service.impl;
  2. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  3. import com.bdqn.beans.Order;
  4. import com.bdqn.beans.User;
  5. import com.bdqn.qianmo.order.service.OrderService;
  6. import com.bdqn.qianmo.order.mapper.OrderMapper;
  7. import org.springframework.beans.factory.annotation.Autowired;
  8. import org.springframework.stereotype.Service;
  9. import org.springframework.transaction.annotation.Transactional;
  10. import org.springframework.web.client.RestTemplate;
  11. /**
  12. *
  13. */
  14. @Service
  15. @Transactional(rollbackFor = Exception.class)
  16. public class OrderServiceImpl extends ServiceImpl<OrderMapper, Order>
  17. implements OrderService {
  18. @Autowired
  19. RestTemplate restTemplate;
  20. @Override
  21. public Order selectById(Long id) {
  22. Order order = this.getBaseMapper().selectById(id);
  23. User forObject = restTemplate.getForObject("http://user-service/user/" + order.getUserId(), User.class);
  24. order.setUser(forObject);
  25. return order;
  26. }
  27. }

注:服务提供者和服务消费者为两个分开运行的SpringBoot项目中,项目启动后效果如图

领域模型:

4.Nacos实现统一配置管理

4.1基础概念及配置

当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。而Nacos一方面可以将配置集中配置,另一方面可以在配置变更时,及时通知微服务,实现配置的热更新

那么,如何在Nacos中配置管理呢,步骤如下

4.1.1⬇️ 在项目中添加依赖

在pom文件中添加nacos-config依赖

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

4.1.2⬇️ 在配置文件中添加config相关属性

需要注意的是,此处的文件名应该为bootstrap.yml文件

  1. spring:
  2. cloud:
  3. nacos:
  4. config:
  5. #nacos配置中心的地址
  6. server-addr: localhost:8848
  7. #文件后缀
  8. file-extension: yml
  9. #共享的配置文件列表
  10. shared-configs:
  11. - application-common.yml
  12. #微服务名称
  13. application:
  14. name: user-service
application.yml和bootstrap.yml的区别

在SpringCloud的官方文档中有描述两个文件的区别

官网链接

原文经过翻译后,大致意思如下:

Spring Cloud 构建于 Spring Boot 之上,在 Spring Boot 中有两种上下文,一种是 bootstrap, 另外一种是 application, bootstrap 是应用程序的父上下文,也就是说 bootstrap 加载优先于 applicaton。bootstrap 主要用于从额外的资源来加载配置信息,还可以在本地外部配置文件中解密属性。这两个上下文共用一个环境,它是任何Spring应用程序的外部属性的来源。bootstrap 里面的属性会优先加载,它们默认也不能被本地相同配置覆盖。

因此,对比application文件,bootstrap配置文件有以下几个特性

  • bootstrap由父ApplicationContext记载,优先级比application高
  • bootstrap中的属性不能被application中的相同属性覆盖

bootstrap/application的应用场景:

application主要用于SpringBoot项目的自动配置

bootstrap配置文件则有以下几个应用场景:

  • 使用SpringCloud Config配置中心时,需要在bootstrap中添加连接到配置中心的配置属性来加载外部配置中心的配置信息;
  • 一些固定的不能被覆盖的属性
  • 一些加密/解密的场景

总结:

优先级为:bootstrap.properties>bootstrap.yml>application.properties>application.yml

bootstrap为系统级别,application为应用级别

4.1.3⬇️ 在Nacos配置中心添加配置文件

需要注意的是,此处的Data ID必须要和项目中配置的微服务名称和文件后缀一样,比如在4.2中配置的是user-service的微服务名称,后缀为yml,那么此处的Data ID就必须为"user-service.yml"

4.1.4▶️ 在Nacos中的配置文件中添加属性

添加完后,即可正常启动项目了

启动流程如下:

4.1.5 热更新

Nacos中的配置文件更新时,如何在项目不重新启动的情况下也能做到热更新呢,其实很简单,只需要在Controller中添加@RefreshScope注解修饰类即可

  1. @RestController
  2. @RequestMapping("/user")
  3. @RefreshScope
  4. public class UserController {
  5. @Autowired
  6. UserService userService;
  7. @Value("${server.port}")
  8. int port;
  9. @Value("${activeTest}")
  10. String activeTest;
  11. @GetMapping("/{id}")
  12. public User getUserById(@PathVariable Long id) {
  13. System.out.println("port: "+port);
  14. return userService.getById(id);
  15. }
  16. @GetMapping("/getTest")
  17. public String get() {
  18. return activeTest;
  19. }
  20. }

这样,当配置文件中的属性被修改时,则可以在不重启项目的情况下进行属性值的更新

@RefreshScope: 经过@RefreshScope注解修饰的Bean,将被RefreshScope进行代理,当配置变更时可以在不重启jvm的前提下刷新Bean中相关的属性值和Bean的热更新。

4.2.6 配置文件的切换

在实际应用场景中,运行的环境可能分为测试环境和dev环境或本地环境,预发布环境,线上环境,那如何在不修改微服务名称的情况下,进行配置文件的切换呢?只需要在bootstrap中添加一个属性即可

profiles.active的规则:

active的值,直接影响项目在nacos中寻找配置文件:微服务名称+"-"+"."+文件类型,例如:

  • 此处的active值若为test,则项目在Nacos配置列表中查找的就是user-service-test.yml的配置文件
  • 此处的active值若为dev,则项目在Nacos配置列表中查找的就是user-service-dev.yml的配置文件

4.2.7 配置数据库

在Nacos单机模式中,nacos使用嵌入式数据库实现数据的存储,不方便观察数据存储的基本情况,因此需要配置mysql数据库,可视化的查看数据的存储情况,步骤如下:

4.2.7.1⬇️ 添加Mysql数据库

先创建一个空的数据库

4.2.7.2⬇️ 转储sql文件

在nacos的安装路径下,找到conf文件夹下的nacos-mysql.sql文件

转储此文件,效果如下:

4.2.7.3▶️ 修改配置文件

在nacos的安装路径下,找到conf文件夹下的application.properties文件

修改后如下:

4.2 Nacos集群模式

为了避免在实际项目中会产生的单点故障,Nacos的运行模式要从单机转为集群

以下操作,所有nacos都需要进行,有一个没有修改则无法运行集群模式

4.2.1⬇️ 模拟集群环境

安装三个nacos来模拟集群环境

然后检查启动器(安装路径下bin目录的startup.cmd文件)的运行模式:

4.2.2⬇️修改配置文件

a. 修改nacos安装路径下config文件夹中的application.properties文件,修改端口号

注意的是,三个nacos的端口号都应该避免重复,以避免端口号占用

b. 同样的文件,修改ip号(如果本机没有安装虚拟机,且只有一个网卡则无需配置)

c. 复制一个安装路径下conf文件夹下的cluster.conf.example文件,并删除.example后缀

d.修改cluster.conf文件,将三个修改后的nacos端口号添加进去

4.2.3▶️运行即可

依次启动三个nacos,效果如图:

微服务项目中的配置如图:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小桥流水78/article/detail/895326
推荐阅读
相关标签
  

闽ICP备14008679号