如何提升企业数字化转型的效率与灵活性
1115
2023-02-04
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依赖
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~