SpringBoot使用Nacos动态配置数据源的方法

网友投稿 1051 2023-02-04

SpringBoot使用Nacos动态配置数据源的方法

SpringBoot使用Nacos动态配置数据源的方法

SpringBoot/SpringCloud项目部署运行后,如果使用硬编码方式定义数据源,那么如果需要更换数据库,就只能通过更改源码并重启的方式来达成目的

而SpringCloud生态中有配置中心这一组件,我们可以将数据源连接属性编写在配置中心中,需要修改连接属性就可以从配置中心中修改并发布,这样就可以热修改数据源位置无需重启服务

那么下面实战说明如何将使用Nacos配置/注册中心配置数据源(请注意看我写的注释来避坑)

首先说明版本

SpringBoot 2.2.0.RELEASE

Druid 1.1.22 (再重写的时候类会随着版本的不同而不同)

mysql 8.0.18

Nacos 1.3.1(Nacos版本不对很可能会踩坑)

IDEA 2020.3.2

MyBatis 2.1.4(没用上,但若使用并不冲突)

文章较长,但大多都是复制粘贴操作,先在这里说明整个配置的步骤

创建SpringBoot项目并引入依赖(直接复制粘贴)

创建bootstrap.yml文件(直接复制粘贴)

创建配置类(直接复制粘贴)

重写Druid的DruidAbstractDataSource类(这个需要根据版本来修改)

在Nacos配置中心中新建配置

完成配置后的项目目录

请注意:我默认读者会使用IDEA创建SpringBoot项目,并且可以自己安装Nacos

1.maven依赖

UTF-8

UTF-8

1.8

3.1.1

com.alibaba.cloud

spring-cloud-alibaba-dependencies

2.1.1.RELEASE

pom

import

org.mybatis.spring.boot

mybatis-spring-boot-starter

2.1.4

org.springframework.boot

spring-boot-starter-test

test

org.junit.vintage

juhttp://nit-vintage-engine

org.springframework.boot

spring-boot-starter-web

mysql

mysql-connector-java

runtime

com.alibaba

druid-spring-boot-starter

1.1.22

com.alibaba.cloud

spring-cloud-starter-alibaba-nacos-config

com.alibaba.cloud

spring-cloud-starter-alibaba-nacos-discovery

org.springframework.boot

spring-boot-configuration-processor

true

org.projectlombok

lombok

true

provided

1.18.12

2.bootstrap.yml(这个优先级高于propertie文件,用于配置Nacos)

如果需要区分生产环境或将Nacos持久化至MySQL请自行学习Nacos官方文档

spring:

application:

#这个服务名称与最下面的file-extension: properties合起来

#即questionBank.properties为Nacos配置文件的名称

name: questionBank

cloud:

nacos:

#注册中心

discovery:

# 是否启用

enabled: true

# nacos服务地址

server-addr: 127.0.0.1:8848

# 服务名

#service: ${spring.application.name}

# 组名

group: DEFAULT

# 权重

weight: 2

# 元数据

metadata:

auth: sty

version: 1.0

# 日志名

log-name: ${spring.application.name}

# 是否开启watch

watch: true

# 多长时间从服务端拉取一次

watch-delay: 30000

# 集群名称

cluster-name: DEFAULT

# 是否开启注册,如果为false,不会将自身注册上去

register-enabled: true

# https

secure: false

#配置中心

config:

server-addr: 127.0.0.1:8848

#个人比较喜欢用properties文件,yaml缩进老出错

file-extension: properties

server:

port: 8080

3.配置类:DruidConfiguration(叫啥名无所谓)

import com.alibaba.druid.pool.DruidDataSource;

import lombok.Data;

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

import org.springframework.cloud.context.config.annotation.RefreshScope;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

/**

* @Author:STY

* @Description: 数据源获取配置(配置中心)

* @Date:2021/3/17

*/

@Configuration

@RefreshScope

@Data

public class DruidConfiguration {

@Value("${spring.datasource.druid.url}")

private String url;

@Value("${spring.datasource.druid.username}")

private String username;

@Value("${spring.datasource.druid.password}")

private String password;

@Value("${spring.datasource.druid.url.driverClassName}")

private String driverClassName;

@Bean(name="datasource")

@RefreshScope

public DruidDataSource dataSource()

{

DruidDataSource datasource = new DruidDataSource();

System.out.println(url);

datasource.setUrl(this.url);

datasource.setUsername(username);

datasource.setPassword(password);

datasource.setDriverClassName(driverClassName);

return datasource;

}

}

注意注意:@RefreshScope一定要加!!!!!!!否则将无法自动刷新从Nacos发布的新数据,因为lombok比较好用所以@Data就直接用他的了

4.然后就是最重要的一步(这个视Druid版本来修改)

重申一下我用的Druid版本为1.1.22

重写com.alibaba.druid.pool.DruidAbstractDataSource类

由于Druid只允许初始化一次,所以只能修改他的源码,而版本不同会导致该类并不相同,在修改源码时必须尤为注意!!!!!!

在com包下创建alibaba.druid.pool(路径别错了)

DruidAbstractDataSource类直接复制过来

然后在复制过来的类中找到以下两个方法

注释掉画圈位置

至此,本地的项目已经配置完成,下面剩下最后一个步骤,在Nacos上创建配置文件

这个Data id 与上面第二个步骤中的名称配置对应(注意看注释)

配置格式要勾选Properties

点击发布,搞定!

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:信息安全和前端哪个好(网络安全和前端哪个好)
下一篇:微信小程序转app(微信小程序转转怎么发布)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~