首页 > 技术文章 > ruoyi(spring-boot)项目 druid 连接池配置多个数据源

fengbol 2021-11-12 14:59 原文

为了容易区分,最好把不同数据库的代码放到不同目录下

1.首先修改 application-druid.yml

druid:
            # 主库数据源
            master:
                url: jdbc:mysql://localhost:3306/ry
                username: root
                password: 123456
            # 从库数据源
            slave:#名称可以自定义,但是要记得代码里保持一致
                enabled: true#这属性不是必须的,但是建议加上,方便切换
                url: jdbc:mysql://localhost:3306/db
                username: root
                password: 123456

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

public enum DataSourceType
{
    MASTER,
    SLAVE //和druid.yml文件里保持一致
}

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方法添加数据源

    @Bean(name = "dynamicDataSource")
    @Primary
    public DynamicDataSource dataSource(DataSource masterDataSource)
    {
        Map<Object, Object> targetDataSources = new HashMap<>();
        targetDataSources.put(DataSourceType.MASTER.name(), masterDataSource);
        setDataSource(targetDataSources, DataSourceType.SLAVE.name(), "slaveDataSource");
        return new DynamicDataSource(masterDataSource, targetDataSources);
    }

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

@Service@DataSource(value = DataSourceType.SLAVE)
public class SysUserServiceImpl{
    // 优先级:先方法,后类,如果方法覆盖了类上的数据源类型,以方法的为准,否则以类上的为准
    @Service@DataSource(value = DataSourceType.MASTER)
    public List<SysUser> selectUserList(SysUser user){
        ...
    }    
}

 

推荐阅读