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

相關文章
相關標籤/搜索