2 Star 1 Fork 0

逝水流年 / dynamic-datasource

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

dynamic-datasource

介绍

使用springboot整合mybatisplus的动态数据源切换,以及对定时任务框架quartz的整合案例,可以运行后添加新的数据源

软件架构

软件架构说明 1.动态数据源配置

spring:
  datasource:
    dynamic:
      primary: master
      strict: false
      datasource:
        master:
          url: jdbc:mysql://localhost:3306/dynamic-datasource?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
          username: root
          password: root
          driver-class-name: com.mysql.cj.jdbc.Driver

2.DynamicDataSource 动态数据源切换主要类

@Configuration
@RequiredArgsConstructor
public class DynamicDataSource extends DynamicRoutingDataSource {

    private final DefaultDataSourceCreator defaultDataSourceCreator;

    public DataSource determineDataSource() {
        //获取当前的数据源key 为null默认走master
        String dsKey = DynamicDataSourceContextHolder.peek();
        Map<String, DataSource> dataSources = this.getDataSources();
        if (StringUtils.hasText(dsKey) && !dataSources.containsKey(dsKey)){
            throw new BusinessException("501","不存在的数据源信息!");
        }
        return this.getDataSource(dsKey);
    }

    @Override
    public Map<String, DataSource> getDataSources() {
        return super.getDataSources();
    }

    public void setDataSources(DataSourceProperty dataSourceProperty){
        //创建新的数据源
        DataSource dataSource = defaultDataSourceCreator.createDataSource(dataSourceProperty);
        //获取本地数据源
        Map<String, DataSource> dataSources = this.getDataSources();
        //把添加的数据源存入本地
        dataSources.put(dataSourceProperty.getPoolName(),dataSource);
    }
}

3.定时任务执行工具类QuartzUtils

public class QuartzUtils {

    /**
     * 创建定时任务 定时任务创建之后默认启动状态
     *
     * @param scheduler  调度器
     */
    public static void createScheduleJob(Scheduler scheduler,String cron,String key,String desc) {
        try {
            // 构建定时任务信息 使用id作为任务唯一值,在执行时可以拿到。
            JobDetail jobDetail = JobBuilder.newJob(DynamicTask.class).withIdentity(key).withDescription(desc).build();
            // 设置定时任务执行方式
            CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(cron);
            // 构建触发器trigger
            CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(key).withSchedule(scheduleBuilder).build();
            scheduler.scheduleJob(jobDetail, trigger);
        } catch (SchedulerException e) {
            throw new BusinessException("502","创建定时任务失败");
        }
    }


    /**
     * 根据任务Id暂停定时任务
     *
     * @param scheduler 调度器
     * @param jobId     定时任务名称
     */
    public static void pauseScheduleJob(Scheduler scheduler, String jobId) {
        JobKey jobKey = JobKey.jobKey(jobId);
        try {
            scheduler.pauseJob(jobKey);
        } catch (SchedulerException e) {
            throw new BusinessException("503","暂停定时任务出错");
        }
    }

    /**
     * 根据任务Id恢复定时任务
     *
     * @param scheduler 调度器
     * @param jobId     定时任务id
     */
    public static void resumeScheduleJob(Scheduler scheduler, String jobId) {
        JobKey jobKey = JobKey.jobKey(jobId);
        try {
            scheduler.resumeJob(jobKey);
        } catch (SchedulerException e) {
            throw new BusinessException("504","启动定时任务出错");
        }
    }


    /**
     * 根据任务id立即运行一次定时任务
     *
     * @param scheduler 调度器
     * @param jobId     定时任务id
     */
    public static void runOnce(Scheduler scheduler, String jobId) {
        JobKey jobKey = JobKey.jobKey(jobId);
        try {
            scheduler.triggerJob(jobKey);
        } catch (SchedulerException e) {
            throw new BusinessException("504","运行定时任务出错");
        }
    }

}

空文件

简介

使用springboot整合mybatisplus的动态数据源切换,以及对定时任务框架quartz的整合案例 展开 收起
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/renyupengs/dynamic-datasource.git
git@gitee.com:renyupengs/dynamic-datasource.git
renyupengs
dynamic-datasource
dynamic-datasource
master

搜索帮助