开发喵星球

ruoyi配置mysql+postgresql多数据源(205)

本文主要介绍若依如何配置mysql+postgresql多数据源

一、添加数据源依赖

位置:ruoyi-common模块中的pom.xml文件

<!-- PostgreSql驱动包 -->
<dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
</dependency>

二、配置数据源

位置:ruoyi-admin模块中的application-druid.yml

# 数据源配置
spring:
    datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        druid:
            # 主库数据源
            master:
                driverClassName: com.mysql.cj.jdbc.Driver
                url: jdbc:mysql://localhost:3306/ruoyi?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                username: root
                password: root

            # 从库数据源
            slave:
                # 从数据源开关/默认关闭
                driverClassName: org.postgresql.Driver
                enabled: true
                url: jdbc:postgresql://localhost:5432/postgis_32_sample
                username: postgres
                password: 123456

三、使用从数据库

在方法或类上用@DataSource(value = DataSourceType.SLAVE)来进行切换即可,使用完后不需要手动切换主库:使用类似如下:

@Service
public class VIPUserServiceImpl implements IVIPUserService
{
    @Autowired
    private VIPUserMapper vipUserMapper;

    @DataSource(value = DataSourceType.SLAVE)
    @Override
    public VIPUser selectVIPUserList(VIPUser vip)

        return vipUserMapper.selectVIPUserList(vip);
    }
}

以上配置完成后重启项目,即可实现多数据源(mysql+ postgresql)的配置。若未实现,继续向下看。

1. 查看DatasourceType类中是否添加数据源枚举

public enum DatasourceType
{
    MASTER,

    SLAVE //和druid.yml文件里保持一致
}

2. 查看DruidConfig.java中是否读取数据源

位置ruoyi-framework模块中的config包的DruidConfig.java

@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);
}

3. 查看DruidConfig类的datasource方法是否添加数据源

位置ruoyi-framework模块中的config包的DruidConfig.java

@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);
}

4. 查看是否添加@Datasource注解

位置:在需要使用多数据源方法或类上是否添加@Datasource注解,其中value用来表示数据源

@service
@Datasource(value = DatasourceType.SLAVE)
public class UserserviceImpl{
    // 优先级:先方法,后类,如果方法覆盖了类上的数据源类型,以方法的为准,否则以类上的为准
    @Datasource(value = DatasourceType.MASTER)
    public List<SysUser> SELEctUserList(SysUser user){

    }    
}
   
分类:Java/OOP 作者:无限繁荣, 吴蓉 发表于:2024-05-10 16:58:02 阅读量:122
<<   >>


powered by kaifamiao