这两天在研究实践一个神奇的功能。可以根据动态数据库,进行切换查看不同数据库的表名;根据不同的表名,查询出不同的字段数据。在开发过程中,我们常常沟通上面说的都比较抽象。
幸福只在拼命努力后才会来敲门
那么,我们来画个原型图吧~~~时间有点赶,所以就大概上图,这个我们看数据是不是很方便了。
动态数据源 即在一个应用中配置多个不同的连接池。对于数据源的使用是相对容易的。由于某些架构或业务中,有时候是要进行多个数据库的操作,这就涉及到多个数据源的创建以及数据源的切换。平台通过整合 dynamic-datasource-spring-boot-starter
为框架提供动态数据源、主从分离、读写分离能力。
/**
* @author Lucky
* @date 2019-05-18
* <p>
* 开启动态数据源
*/
@Target({ ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@EnableAutoConfiguration(exclude = { DruidDataSourceAutoConfigure.class })
@Import(DynamicDataSourceAutoConfiguration.class)
public @interface EnableDynamicDataSource {
}
如何使用
- 业务服务引入动态数据源服务
<dependency>
<groupId>com.pig4cloud</groupId>
<artifactId>pig-common-datasource</artifactId>
</dependency>
- 配置数据源信息来源 (JDBC配置)
spring:
datasource:
druid:
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: root
url: jdbc:mysql://IP:PORT/pig_demo
query-ds-sql: 'select * from gen_datasource_conf where del_flag = 0'
- 开启动态数据源
@EnableDynamicDataSource
public class PigApplication {
public static void main(String[] args) {
SpringApplication.run(PigApplication.class, args);
}
}
- 使用动态数据源查询
- Mapper 层
@Ds("#last")
固定写法,最后一个参数为指定数据源(必须有)
@Mapper
public interface PigDemoMapper extends BaseMapper<PigDemo> {
@DS("#last")
Map selectDs(String dsName);
}
- Service 层调用
@Service
public class PigDemoServiceImpl extends ServiceImpl<PigDemoMapper, Demo> implements PigDemoService {
@Override
public Object getByDs(Integer id) {
// 此处 dsName 为以上 gen_datasource_conf 加载数据源 name 字段
return baseMapper.selectDs("sca_core");
}
}
- 扩展使用
@DS("#session.tenantName")//从session获取
public List selectSpelBySession() {
return userMapper.selectUsers();
}
@DS("#header.tenantName")//从header获取
public List selectSpelByHeader() {
return userMapper.selectUsers();
}
@DS("#tenantName")//使用spel从参数获取
public List selectSpelByKey(String tenantName) {
return userMapper.selectUsers();
}
@DS("#user.tenantName")//使用spel从复杂参数获取
public List selecSpelByTenant(User user) {
return userMapper.selectUsers();
}
《当幸福来敲门》别让人家告诉你、你做不成什么事、即使我也不行!那些意识无成的人总想告诉你、你也成不了大器、如果你有梦想、你就要去捍卫他、仅此而已!
如果你想要做些什么,就得去努力争取,仅此而已。