若依-禁用本地定时任务

原因

  • 本地和服务器同时启动的话,就会导致同一个定时任务执行两次,需要使用配置项不同环境初步初始化定时任务

定时任务实现类

  • 程序启动的时候,自动创建所有的定时任务
  • 这里设置,根据配置项,确定创不创建定时任务
/**
 * 定时任务调度信息 服务层
 *
 * @author ruoyi
 */
@Slf4j
@Service
public class SysJobServiceImpl implements ISysJobService
{


    // 此处代码省略一万行

    // 读取配置文件
    @Value("${schedule.enabled}")
    private Boolean scheduleEnableFlag;

    /**
     * 项目启动时,初始化定时器 主要是防止手动修改数据库导致未同步到定时任务处理(注:不能手动修改数据库ID和任务组名,否则会导致脏数据)
     */
    @PostConstruct
    public void init() throws SchedulerException, TaskException
    {
        scheduler.clear();

        if (scheduleEnableFlag) {
            List<SysJob> jobList = jobMapper.selectJobAll();
            for (SysJob job : jobList)
            {
                ScheduleUtils.createScheduleJob(scheduler, job);
            }

            log.info("【定时任务已启动】");
        } else {
            log.info("【定时任务未启动】");
        }
    }
}

application-dev.yml

## 定时任务全局开关(开发环境)
schedule:
  enabled: false

application-prod.yml

## 定时任务全局开关(正式环境)
schedule:
  enabled: true
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SpringBoot是一个非常流行的Java Web框架,而mybatis-plus是一个非常强大的ORM框架,两者合起来可以实现非常好用的定时任务管理。 下面是基于SpringBoot和mybatis-plus实现定时任务管理的步骤: 1. 添加依赖 在pom.xml文件中添加以下依赖: ```xml <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3.1</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.4.3.1</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-quartz</artifactId> </dependency> </dependencies> ``` 2. 配置数据库 在application.properties文件中添加以下配置: ``` # 数据库配置 spring.datasource.url=jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.jdbc.Driver # mybatis-plus配置 mybatis-plus.mapper-locations=classpath:/mapper/*.xml # Quartz配置 org.quartz.scheduler.instanceName = QuartzScheduler org.quartz.scheduler.instanceId = AUTO org.quartz.threadPool.threadCount=10 org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate org.quartz.jobStore.dataSource=myDS org.quartz.jobStore.tablePrefix=QRTZ_ org.quartz.dataSource.myDS.driver=com.mysql.jdbc.Driver org.quartz.dataSource.myDS.URL=jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useSSL=false org.quartz.dataSource.myDS.user=root org.quartz.dataSource.myDS.password=123456 org.quartz.dataSource.myDS.maxConnections=5 ``` 3. 创建实体类和Mapper 创建一个定时任务的实体类,并在其中定义定时任务的属性: ```java @Data public class JobEntity { /** * 任务ID */ private String jobId; /** * 任务名称 */ private String jobName; /** * 任务分组 */ private String jobGroup; /** * 任务执行类 */ private String jobClass; /** * 任务描述 */ private String jobDescription; /** * 任务状态 0禁用 1启用 */ private Integer jobStatus; /** * 任务表达式 */ private String jobExpression; /** * 创建时间 */ private Date createTime; /** * 修改时间 */ private Date modifyTime; } ``` 创建一个定时任务的Mapper,并继承mybatis-plus的BaseMapper: ```java @Repository public interface JobMapper extends BaseMapper<JobEntity> { } ``` 4. 创建定时任务工具类 创建一个定时任务的工具类,用于实现定时任务的添加、删除、暂停和恢复等操作: ```java @Service public class QuartzService { @Autowired private Scheduler scheduler; /** * 添加任务 * * @param jobEntity */ public void addJob(JobEntity jobEntity) throws SchedulerException, ClassNotFoundException { // 获取任务类 Class<? extends Job> jobClass = (Class<? extends Job>) Class.forName(jobEntity.getJobClass()); // 创建任务 JobDetail jobDetail = JobBuilder.newJob(jobClass) .withIdentity(jobEntity.getJobName(), jobEntity.getJobGroup()) .withDescription(jobEntity.getJobDescription()) .storeDurably(true) .build(); // 创建触发器 Trigger trigger = TriggerBuilder.newTrigger() .withIdentity(jobEntity.getJobName(), jobEntity.getJobGroup()) .withSchedule(CronScheduleBuilder.cronSchedule(jobEntity.getJobExpression())) .build(); // 将任务和触发器添加到调度器 scheduler.scheduleJob(jobDetail, trigger); } /** * 删除任务 * * @param jobId * @param jobGroup */ public void deleteJob(String jobId, String jobGroup) throws SchedulerException { JobKey jobKey = new JobKey(jobId, jobGroup); scheduler.deleteJob(jobKey); } /** * 暂停任务 * * @param jobId * @param jobGroup */ public void pauseJob(String jobId, String jobGroup) throws SchedulerException { JobKey jobKey = new JobKey(jobId, jobGroup); scheduler.pauseJob(jobKey); } /** * 恢复任务 * * @param jobId * @param jobGroup */ public void resumeJob(String jobId, String jobGroup) throws SchedulerException { JobKey jobKey = new JobKey(jobId, jobGroup); scheduler.resumeJob(jobKey); } } ``` 5. 创建定时任务控制器 创建一个定时任务的控制器,用于实现定时任务的增删改查等操作: ```java @RestController @RequestMapping("/job") public class JobController { @Autowired private JobMapper jobMapper; @Autowired private QuartzService quartzService; /** * 添加任务 * * @param jobEntity */ @PostMapping("/add") public void addJob(@RequestBody JobEntity jobEntity) throws SchedulerException { // 添加任务 quartzService.addJob(jobEntity); // 保存任务到数据库 jobMapper.insert(jobEntity); } /** * 删除任务 * * @param jobId * @param jobGroup */ @DeleteMapping("/delete") public void deleteJob(String jobId, String jobGroup) throws SchedulerException { // 删除任务 quartzService.deleteJob(jobId, jobGroup); // 从数据库中删除任务 QueryWrapper<JobEntity> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("job_id", jobId); queryWrapper.eq("job_group", jobGroup); jobMapper.delete(queryWrapper); } /** * 暂停任务 * * @param jobId * @param jobGroup */ @PutMapping("/pause") public void pauseJob(String jobId, String jobGroup) throws SchedulerException { // 暂停任务 quartzService.pauseJob(jobId, jobGroup); // 更新任务状态 JobEntity jobEntity = new JobEntity(); jobEntity.setJobId(jobId); jobEntity.setJobGroup(jobGroup); jobEntity.setJobStatus(0); jobMapper.updateById(jobEntity); } /** * 恢复任务 * * @param jobId * @param jobGroup */ @PutMapping("/resume") public void resumeJob(String jobId, String jobGroup) throws SchedulerException { // 恢复任务 quartzService.resumeJob(jobId, jobGroup); // 更新任务状态 JobEntity jobEntity = new JobEntity(); jobEntity.setJobId(jobId); jobEntity.setJobGroup(jobGroup); jobEntity.setJobStatus(1); jobMapper.updateById(jobEntity); } /** * 获取任务列表 * * @return */ @GetMapping("/list") public List<JobEntity> listJob() { return jobMapper.selectList(null); } } ``` 至此,基于SpringBoot和mybatis-plus实现定时任务管理的步骤就完成了。我们可以通过访问控制器提供的接口来实现定时任务的添加、删除、暂停和恢复等操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值