多数据源

在实际开发中,经常可能遇到在一个应用中可能需要访问多个数据库的情况

在需要切换数据源Service或Mapper方法上添加@DataSource注解

@DataSource(value = DataSourceType.MASTER),其中value用来表示数据源名称

提示

关于多数据源使用流程(如果有多个,可以参考slave添加)

支持参数如下:

参数

类型

默认值

描述

value

DataSourceType

DataSourceType.MASTER

主库

1、在application-druid.yml配置从库数据源

# 从库数据源

slave:

# 从数据源开关/默认关闭

enabled: true

url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8

username: root

password: password

2、在DataSourceType类添加数据源枚举

/**

* 从库

*/

SLAVE

3、在DruidConfig配置读取数据源

@Bean@ConfigurationProperties("spring.datasource.druid.slave")@ConditionalOnProperty(prefix = "spring.datasource.druid.slave", name = "enabled", havingValue = "true")public DataSource slaveDataSource(DruidProperties druidProperties){

DruidDataSource dataSource = DruidDataSourceBuilder.create().build();

return druidProperties.dataSource(dataSource);}

4、在DruidConfig类dataSource方法添加数据源

setDataSource(targetDataSources, DataSourceType.SLAVE.name(), "slaveDataSource");

5、在需要使用多数据源方法或类上添加@DataSource注解,其中value用来表示数据源

@DataSource(value = DataSourceType.SLAVE)public List<SysUser> selectUserList(SysUser user){

return userMapper.selectUserList(user);}

@Service@DataSource(value = DataSourceType.SLAVE)public class SysUserServiceImpl

对于特殊情况可以通过DynamicDataSourceContextHolder手动实现数据源切换

public List<SysUser> selectUserList(SysUser user){

DynamicDataSourceContextHolder.setDataSourceType(DataSourceType.SLAVE.name());

List<SysUser> userList = userMapper.selectUserList(user);

DynamicDataSourceContextHolder.clearDataSourceType();

return userList;}

逻辑实现代码 com.ruoyi.framework.aspectj.DataSourceAspect

注意:目前配置了一个从库,默认关闭状态。如果不需要多数据源不用做任何配置。 另外可新增多个从库。支持不同数据源(Mysql、Oracle、SQLServer)

以下是驱动:

# 数据源配置

spring:

    datasource:

        type: com.alibaba.druid.pool.DruidDataSource

        

        druid:

            # 主库数据源

            master:

                driverClassName: com.microsoft.sqlserver.jdbc.SQLServerDriver

                url:  jdbc:sqlserver://127.0.0.1;SelectMethod=cursor;DatabaseName=QMSVue

                username: sa

                password: 123

            # 从库数据源

            slave:

                # 从数据源开关/默认关闭

                enabled: true

                driverClassName : com.mysql.jdbc.Driver

                url:  jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8

                username: root

                password: password

            # 初始连接数

            initialSize: 5

            # 最小连接池数量

            minIdle: 10

            # 最大连接池数量

            maxActive: 20

            # 配置获取连接等待超时的时间

            maxWait: 60000

            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒

            timeBetweenEvictionRunsMillis: 60000

            # 配置一个连接在池中最小生存的时间,单位是毫秒

            minEvictableIdleTimeMillis: 300000

            # 配置一个连接在池中最大生存的时间,单位是毫秒

            maxEvictableIdleTimeMillis: 900000

            # 配置检测连接是否有效

            validationQuery: SELECT 1

            testWhileIdle: true

            testOnBorrow: false

            testOnReturn: false

            webStatFilter:

                enabled: true

            statViewServlet:

                enabled: true

                # 设置白名单,不填则允许所有访问

                allow:

                url-pattern: /druid/*

                # 控制台管理用户名和密码

                login-username:

                login-password:

            filter:

                stat:

                    enabled: true

                    # 慢SQL记录

                    log-slow-sql: true

                    slow-sql-millis: 1000

                    merge-sql: true

                wall:

                    config:

                        multi-statement-allow: true

配置不同类型的数据源分页pagehelper采用自动识别分页:

# PageHelper分页插件

pagehelper:

  autoRuntimeDialect: true

  reasonable: true

  supportMethodsArguments: true

  params: count=countSql

敲黑板:

oracle数据库时把测试连接配置为空;

Logo

快速构建 Web 应用程序

更多推荐