时间:2021-05-20
SpringBoot/SpringCloud项目部署运行后,如果使用硬编码方式定义数据源,那么如果需要更换数据库,就只能通过更改源码并重启的方式来达成目的
而SpringCloud生态中有配置中心这一组件,我们可以将数据源连接属性编写在配置中心中,需要修改连接属性就可以从配置中心中修改并发布,这样就可以热修改数据源位置无需重启服务
那么下面实战说明如何将使用Nacos配置/注册中心配置数据源(请注意看我写的注释来避坑)
首先说明版本
文章较长,但大多都是复制粘贴操作,先在这里说明整个配置的步骤
完成配置后的项目目录
请注意:我默认读者会使用IDEA创建SpringBoot项目,并且可以自己安装Nacos
1.maven依赖
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <maven-jar-plugin.version>3.1.1</maven-jar-plugin.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-alibaba-dependencies</artifactId> <version>2.1.1.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.4</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions> <exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.1.22</version> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> <scope>provided</scope> <version>1.18.12</version> </dependency> </dependencies>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: propertiesserver: port: 80803.配置类: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@Datapublic 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
点击发布,搞定!
到此这篇关于SpringBoot使用Nacos动态配置数据源的方法的文章就介绍到这了,更多相关SpringBoot动态配置数据源内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
此方案适用于解决springboot项目运行时动态添加数据源,非静态切换多数据源!!!一、多数据源应用场景:1.配置文件配置多数据源,如默认数据源:master
注:本文的多数据源配置及切换的实现方法是,在框架中封装,具体项目中配置及使用,也适用于多模块项目配置文件数据源读取通过springboot的Envioment和
由于项目需要,最近研究了一下基于springBoot与SpringDataJPA的多数据源配置问题。以下是传统的单数据源配置代码。这里使用的是Spring的An
SpringBoot集成MyBatis在集成MyBatis前,我们先配置一个druid数据源。SpringBoot集成druiddruid有很多个配置选项,使用
SpringBoot如何快速配置数据源;有如下两种方式:通过spring-boot-starter-jdbc快速配置数据源自定义数据源DataSource首先我