本文主要介绍若依如何配置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)的配置。若未实现,继续向下看。
DatasourceType
类中是否添加数据源枚举public enum DatasourceType
{
MASTER,
SLAVE //和druid.yml文件里保持一致
}
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);
}
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);
}
位置:在需要使用多数据源方法或类上是否添加
@Datasource
注解,其中value
用来表示数据源
@service
@Datasource(value = DatasourceType.SLAVE)
public class UserserviceImpl{
// 优先级:先方法,后类,如果方法覆盖了类上的数据源类型,以方法的为准,否则以类上的为准
@Datasource(value = DatasourceType.MASTER)
public List<SysUser> SELEctUserList(SysUser user){
}
}
powered by kaifamiao