SpringCloud+quartz 定时提醒系统

SpringCloud+quartz 定时提醒系统

以前经过Springboot作了一个定时查询系统,前几天经过SpringCloud编写了个升级版,功能和以前的差很少,如今来看看吧。java

首先须要先关注个人测试号啦,本系统经过微信测试号第三方受权登陆,扫描下方二维码便可关注
图片描述git

关注以后进入个人测试号点击定时提醒则进入本系统github

clipboard.png

既然是使用SpringCloud,那么确定是要把一个项目分为几个模块来运行啦spring

clipboard.png

本人仍是学生,云服务器只有一台,因此就把这四个模块放在同一台服务器了,勿怪勿怪~服务器

系统分为四个模块微信

  • Eureka Server 服务注册中心
  • quartz定时提醒服务
  • 用户消费者服务
  • 微信测试号第三方受权以及发送模板消息服务

注:本系统没有运用zuul网关app

Eureka Server我就不说了,简单的配置一下就能够直接运用了。负载均衡

quartz定时提醒呢,就须要quartz这个第三方的库工具

<dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.3.0</version>
        </dependency>

并且还须要一些spring的依赖测试

quartz有简单任务触发和复杂任务触发,本系统使用的是cron复杂任务触发器定制任务调度

编写一个Job接口实现类

clipboard.png

实现里面的execute方法,该方法是在任务触发时执行,在方法里面写上你要执行的东西。

以后配置scheduler,项目启动的时候建立bean

@Configuration
public class QuartzConfigration {
    /**
     * attention:
     * Details:定义quartz调度工厂
     */
    @Bean(name = "scheduler")
    public SchedulerFactoryBean schedulerFactory() {
        SchedulerFactoryBean bean = new SchedulerFactoryBean();
        // 用于quartz集群,QuartzScheduler 启动时更新己存在的Job
        bean.setOverwriteExistingJobs(true);
        // 延时启动,应用启动1秒后
//        bean.setStartupDelay(5);
        // 注册触发器
//        bean.setTriggers(jobTrigger);
        return bean;
    }
}

建立任务(截取本身写的工具类中的部份内容并加以修改),能够本身写个工具类,之后方便本身调用。

String event= (String) map.get("eventId");
        String date= (String) map.get("date");
        JobDataMap jobDataMap=new JobDataMap();
        jobDataMap.put("eventId",event);  //将参数传递到Job类中
        jobDataMap.put("date",date);
        JobDetail jobDetail= JobBuilder
                .newJob(MyBean.class)
                .withIdentity(key,"group1")
                .usingJobData(jobDataMap)
                .build();
        CronTrigger cronTrigger = TriggerBuilder.newTrigger()
                .withIdentity(key, "group1")
                .withSchedule(CronScheduleBuilder.cronSchedule(cron))
                .build();
        SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
        log.info("建立事件成功,执行时间为:{}",format.format(scheduler.scheduleJob(jobDetail,cronTrigger)));

建立时间后想要修改的话就须要这么写

TriggerKey triggerKey=new TriggerKey(eventId,"group1");
        CronTriggerImpl cronTrigger= (CronTriggerImpl) scheduler.getTrigger(triggerKey);
        cronTrigger.setCronExpression(cron);
        scheduler.rescheduleJob(triggerKey,cronTrigger);

在Job实现类里面注入不了Service,那么能够这么作

ConfigurableApplicationContext run = SpringApplication.run(SpringcloudQuartzApplication.class, args);
        EventService eventService = run.getBean(EventService.class);
        MyBean.eventService=eventService;

这个就是quartz模块的部分介绍了。

接下来是用户消费者模块,调用quartz的服务,经过Feign进行调用,比较坑的事情是,Feign的方法参数,只能传递一个对象参数和多个参数,不能同时传递两个对象参数,并且传递对象参数还须要在前面加上注解

@PostMapping("/update")
    public ResultVO update(@RequestBody(required = false)EventForm eventForm,
                           @RequestParam(name = "id") String id);

Feign中默认使用Ribbon进行负载均衡(虽然本系统没有集群~)

微信第三方受权和发送模板消息就很少说了,就是使用第三方的库进行编写

<dependency>
            <groupId>com.github.binarywang</groupId>
            <artifactId>weixin-java-mp</artifactId>
            <version>2.8.0</version>
        </dependency>

微信第三方受权的github也贴出来,能够自行去看API,点击这里进入github

项目效果演示

图片描述

图片描述

图片描述

好了,介绍就到这里啦~有什么问题就发我邮箱提问吧13427434344@163.com