以前经过Springboot作了一个定时查询系统,前几天经过SpringCloud编写了个升级版,功能和以前的差很少,如今来看看吧。java
首先须要先关注个人测试号啦,本系统经过微信测试号第三方受权登陆,扫描下方二维码便可关注git
关注以后进入个人测试号点击定时提醒则进入本系统github
既然是使用SpringCloud,那么确定是要把一个项目分为几个模块来运行啦spring
本人仍是学生,云服务器只有一台,因此就把这四个模块放在同一台服务器了,勿怪勿怪~服务器
系统分为四个模块微信
注:本系统没有运用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接口实现类
实现里面的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