renren-security多数据源配置详解:支持MySQL、Oracle、PostgreSQL
【免费下载链接】renren-security采用Spring、MyBatis、Shiro框架,开发的一套权限系统,极低门槛,拿来即用。设计之初,就非常注重安全性,为企业系统保驾护航,让一切都变得如此简单。【QQ群:324780204、145799952】项目地址: https://gitcode.com/gh_mirrors/re/renren-security
renren-security是一套基于Spring、MyBatis、Shiro框架开发的权限系统,极低门槛,拿来即用。设计之初,就非常注重安全性,为企业系统保驾护航,让一切都变得如此简单。本文将详细介绍如何在renren-security中配置多数据源,以支持MySQL、Oracle、PostgreSQL等多种数据库。
为什么需要多数据源配置
在企业级应用开发中,常常会遇到需要同时操作多个数据库的场景。例如,部分数据存储在MySQL中,而业务报表数据存储在PostgreSQL中,或者需要从Oracle数据库中读取历史数据。renren-security提供了强大的多数据源支持,让开发者可以轻松应对这些复杂场景。
多数据源配置核心组件
renren-security的多数据源功能主要由renren-dynamic-datasource模块提供支持。该模块包含以下核心组件:
DynamicDataSourceConfig:多数据源配置类,负责创建和管理多个数据源DynamicDataSource:动态数据源类,实现数据源的动态切换DataSource:多数据源注解,用于标记需要使用特定数据源的方法DataSourceAspect:多数据源切面处理类,负责解析数据源注解并切换数据源
快速开始:多数据源配置步骤
步骤一:引入多数据源依赖
确保项目中已引入renren-dynamic-datasource模块,相关依赖配置在renren-dynamic-datasource/pom.xml中。
步骤二:配置数据源信息
在renren-admin/src/main/resources/application-dev.yml中配置多数据源信息,示例如下:
##多数据源的配置,需要引用renren-dynamic-datasource spring: datasource: druid: # 默认数据源配置 driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/renren_security?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai username: root password: root dynamic: datasource: # 数据源1:MySQL mysql: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/renren_security_mysql?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai username: root password: root # 数据源2:Oracle oracle: driver-class-name: oracle.jdbc.OracleDriver url: jdbc:oracle:thin:@localhost:1521:ORCL username: system password: oracle # 数据源3:PostgreSQL postgresql: driver-class-name: org.postgresql.Driver url: jdbc:postgresql://localhost:5432/renren_security_pg username: postgres password: postgres步骤三:使用@DataSource注解切换数据源
在需要使用特定数据源的Service方法上添加@DataSource注解,指定数据源名称即可。例如:
@Service public class UserServiceImpl extends ServiceImpl<UserDao, UserEntity> implements UserService { // 使用默认数据源 @Override public List<UserEntity> list() { return baseMapper.selectList(null); } // 使用MySQL数据源 @DataSource("mysql") @Override public List<UserEntity> listFromMysql() { return baseMapper.selectList(null); } // 使用Oracle数据源 @DataSource("oracle") @Override public List<UserEntity> listFromOracle() { return baseMapper.selectList(null); } // 使用PostgreSQL数据源 @DataSource("postgresql") @Override public List<UserEntity> listFromPostgreSQL() { return baseMapper.selectList(null); } }多数据源实现原理
多数据源的实现核心在于DynamicDataSourceConfig类,该类负责创建和管理多个数据源。关键代码如下:
@Configuration @EnableConfigurationProperties(DynamicDataSourceProperties.class) public class DynamicDataSourceConfig { @Autowired private DynamicDataSourceProperties properties; @Bean public DynamicDataSource dynamicDataSource(DataSourceProperties dataSourceProperties) { DynamicDataSource dynamicDataSource = new DynamicDataSource(); dynamicDataSource.setTargetDataSources(getDynamicDataSource()); //默认数据源 DruidDataSource defaultDataSource = DynamicDataSourceFactory.buildDruidDataSource(dataSourceProperties); dynamicDataSource.setDefaultTargetDataSource(defaultDataSource); return dynamicDataSource; } private Map<Object, Object> getDynamicDataSource(){ Map<String, DataSourceProperties> dataSourcePropertiesMap = properties.getDatasource(); Map<Object, Object> targetDataSources = new HashMap<>(dataSourcePropertiesMap.size()); dataSourcePropertiesMap.forEach((k, v) -> { DruidDataSource druidDataSource = DynamicDataSourceFactory.buildDruidDataSource(v); targetDataSources.put(k, druidDataSource); }); return targetDataSources; } }上述代码中,getDynamicDataSource方法从配置中读取所有数据源信息,并创建对应的DruidDataSource实例,存储在targetDataSourcesmap中。dynamicDataSource方法则创建DynamicDataSource实例,设置所有数据源和默认数据源。
多数据源使用场景
场景一:读写分离
可以配置一个主库(写库)和多个从库(读库),通过@DataSource注解在写操作时使用主库,读操作时使用从库,实现读写分离。
场景二:多数据库类型支持
如本文所述,同时支持MySQL、Oracle、PostgreSQL等多种数据库类型,满足不同业务数据存储需求。
场景三:分库分表
对于数据量大的表,可以按一定规则分拆到多个数据库中,通过多数据源实现分库分表查询。
多数据源测试
renren-security提供了多数据源测试类DynamicDataSourceTest,位于renren-admin/src/test/java/io/renren/DynamicDataSourceTest.java,可以通过该测试类验证多数据源配置是否正确。
总结
renren-security的多数据源功能为企业级应用开发提供了强大的支持,通过简单的配置和注解即可实现多数据源的动态切换。无论是读写分离、多数据库类型支持还是分库分表,renren-security都能满足你的需求,让开发变得更加简单高效。
如果你在使用过程中遇到任何问题,可以加入QQ群:324780204、145799952,与其他开发者交流讨论。
【免费下载链接】renren-security采用Spring、MyBatis、Shiro框架,开发的一套权限系统,极低门槛,拿来即用。设计之初,就非常注重安全性,为企业系统保驾护航,让一切都变得如此简单。【QQ群:324780204、145799952】项目地址: https://gitcode.com/gh_mirrors/re/renren-security
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考