SpringCloud+quartz 定时提醒系统
之前通过Springboot做了一个定时查询系统,前几天通过SpringCloud编写了个升级版,功能和之前的差不多,现在来看看吧。
首先需要先关注我的测试号啦,本系统通过微信测试号第三方授权登录,扫描下方二维码即可关注
关注之后进入我的测试号点击定时提醒则进入本系统
既然是使用SpringCloud,那么肯定是要把一个项目分为几个模块来运行啦
本人还是学生,云服务器只有一台,所以就把这四个模块放在同一台服务器了,勿怪勿怪~
系统分为四个模块
- Eureka Server 服务注册中心
- quartz定时提醒服务
- 用户消费者服务
- 微信测试号第三方授权以及发送模板消息服务
注:本系统没有运用zuul网关
Eureka Server我就不说了,简单的配置一下就可以直接运用了。
quartz定时提醒呢,就需要quartz这个第三方的库
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.0</version>
</dependency>
而且还需要一些spring的依赖
quartz有简单任务触发和复杂任务触发,本系统使用的是cron复杂任务触发器定制任务调度
编写一个Job接口实现类
实现里面的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
项目效果演示
好了,介绍就到这里啦~
有什么问题就发我邮箱提问吧
[email protected]