这篇文章主要介绍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
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>
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: 8080
配置类: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;@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就直接用他的了
然后就是最重要的一步(这个视Druid版本来修改)
重申一下我用的Druid版本为1.1.22
重写com.alibaba.druid.pool.DruidAbstractDataSource类
由于Druid只允许初始化一次,所以只能修改他的源码,而版本不同会导致该类并不相同,在修改源码时必须尤为注意!!!!!!
在com包下创建alibaba.druid.pool(路径别错了)
DruidAbstractDataSource类直接复制过来
然后在复制过来的类中找到以下两个方法
注释掉画圈位置
至此,本地的项目已经配置完成,下面剩下最后一个步骤,在Nacos上创建配置文件
这个Data id 与上面第二个步骤中的名称配置对应(注意看注释)
配置格式要勾选Properties
点击发布,搞定!
以上是“SpringBoot怎么使用Nacos动态配置数据源”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网行业资讯频道!