SpringBoot 集成 elastic job 3

官方的starter目前不支持注解聲明job待错。
這里做了一些擴展

  • 支持注解聲明job
  • 支持多級注解讥此,一個service聲明多個job
  • 支持手工增加,刪除,觸發(fā)job

https://github.com/kangarooxin/elastic-job3-spring-boot-starter

使用說明:

  1. 在pom.xml 添加引用
<dependency>
    <groupId>io.github.kangarooxin</groupId>
    <artifactId>elastic-job3-spring-boot-starter</artifactId>
    <version>1.0.1</version>
</dependency>
  1. 配置
   #reg-center
   elasticjob.reg-center.server-lists=localhost:2181
   elasticjob.reg-center.namespace=${spring.application.name}.elastic-job
  1. 使用注解
@Service
@ElasticJobScheduler(cron = "0/5 * * * * ?", shardingTotalCount = 4, name = "SimpleElasticJob",
        shardingItemParameters = "0=0,1=0,2=1,3=1", jobParameters = "parameter")
@Slf4j
public class SimpleElasticJob implements SimpleJob {

   @Override
   public void execute(ShardingContext shardingContext) {
      log.info("Thread ID: {}, ShardingTotalCount: {}, ShardingItem: {}, ShardingParameter: {}, JobName: {}, JobParameter: {}",
              Thread.currentThread().getId(),
              shardingContext.getShardingTotalCount(),
              shardingContext.getShardingItem(),
              shardingContext.getShardingParameter(),
              shardingContext.getJobName(),
              shardingContext.getJobParameter()
      );
   }
}
  1. 支持多級注解
@Service
@ElasticJobScheduler(cron = "0/5 * * * * ?", shardingTotalCount = 4, name = "SimpleElasticJobLevel1",
        shardingItemParameters = "0=0,1=0,2=1,3=1", jobParameters = "parameter")
@ElasticJobScheduler(cron = "0 */1 * * * ?", shardingTotalCount = 4, name = "SimpleElasticJobLevel2",
        shardingItemParameters = "0=0,1=0,2=1,3=1", jobParameters = "parameter")
@Slf4j
public class MultipleElasticJob implements SimpleJob {

   @Override
   public void execute(ShardingContext shardingContext) {
      log.info("Thread ID: {}, ShardingTotalCount: {}, ShardingItem: {}, ShardingParameter: {}, JobName: {}, JobParameter: {}",
              Thread.currentThread().getId(),
              shardingContext.getShardingTotalCount(),
              shardingContext.getShardingItem(),
              shardingContext.getShardingParameter(),
              shardingContext.getJobName(),
              shardingContext.getJobParameter()
      );
   }
}
  1. 使用ElasticJobService,可以手工增加,刪除,觸發(fā)job
public interface ElasticJobService {

    /**
     * 添加簡單作業(yè)
     *
     * @param elasticJob
     * @param jobName
     * @param shardingTotalCount
     * @param cron
     */
    JobBootstrap addJob(ElasticJob elasticJob, String jobName, int shardingTotalCount, String cron);

    /**
     * 添加簡單作業(yè)
     *
     * @param elasticJob
     * @param jobName
     * @param shardingTotalCount
     * @param cron
     * @param jobParameter
     * @param shardingItemParameters
     */
    JobBootstrap addJob(ElasticJob elasticJob, String jobName, int shardingTotalCount, String cron, String jobParameter, String... shardingItemParameters);

    /**
     * 添加簡單作業(yè)
     *
     * @param jobConfiguration
     * @param jobBootstrapBeanName 非必填
     * @param elasticJob
     * @return
     */
    JobBootstrap addJob(JobConfiguration jobConfiguration, String jobBootstrapBeanName, ElasticJob elasticJob);

    /**
     * 添加數(shù)據(jù)流作業(yè)
     *
     * @param jobConfiguration
     * @param jobBootstrapBeanName
     * @param elasticJob
     * @param streamingProcess     是否開啟流式處理 默認(rèn)false
     * @return
     */
    <T> JobBootstrap addDataFlowJob(JobConfiguration jobConfiguration, String jobBootstrapBeanName, DataflowJob<T> elasticJob, boolean streamingProcess);

    /**
     * 添加定時Script調(diào)度
     *
     * @param jobConfiguration
     * @param scriptCommendLine
     */
    JobBootstrap addScriptJob(JobConfiguration jobConfiguration, String jobBootstrapBeanName, String scriptCommendLine);

    /**
     * 添加定時Http調(diào)度
     *
     * @param jobConfiguration
     * @param httpProp
     */
    JobBootstrap addHttpJob(JobConfiguration jobConfiguration, String jobBootstrapBeanName, HttpJobProp httpProp);

    /**
     * 移除job
     *
     * @param jobName
     */
    void removeJob(String jobName);

    /**
     * 移除job
     *
     * @param jobName
     * @param jobBootstrapBeanName
     */
    void removeJob(String jobName, String jobBootstrapBeanName);

    /**
     * get job configuration.
     *
     * @param jobName job name
     * @return job configuration
     */
    JobConfigurationPOJO getJobConfiguration(String jobName);

    /**
     * Update job configuration.
     *
     * @param jobConfig job configuration
     */
    void updateJobConfiguration(JobConfigurationPOJO jobConfig);

    /**
     * Remove job configuration.
     *
     * @param jobName job name
     */
    void removeJobConfiguration(String jobName);

    /**
     * Trigger job to run at once.
     *
     * <p>Job will not start until it does not conflict with the last running job, and this tag will be automatically cleaned up after it starts.</p>
     *
     * @param jobName job name
     */
    void trigger(String jobName);

    /**
     * Get jobs total count.
     *
     * @return jobs total count.
     */
    int getJobsTotalCount();

    /**
     * Get all jobs brief info.
     *
     * @return all jobs brief info.
     */
    Collection<JobBriefInfo> getAllJobsBriefInfo();

    /**
     * Get job brief info.
     *
     * @param jobName job name
     * @return job brief info
     */
    JobBriefInfo getJobBriefInfo(String jobName);
}
  1. 更多配置
#配置策略陈肛,自定義策略參考官方文檔定義后配置到這里即可
#錯誤策略.  LOG,THROW,IGNORE,EMAIL,WECHAT,DINGTALK
elasticjob.job-error-handler-type=LOG
#分片策略. AVG_ALLOCATION,ODEVITY,ROUND_ROBIN
elasticjob.job-sharding-strategy-type=AVG_ALLOCATION
#線程策略. CPU,SINGLE_THREAD
elasticjob.job-executor-service-handler-type=CPU

#追蹤
elasticjob.tracing.type=RDB
#multiple datasource
elasticjob.tracing.data-source-bean-name=db1MasterSlaveRoutingDatasource

#配置郵件提醒策略屬性
elasticjob.props.email.host=host
elasticjob.props.email.port=465
elasticjob.props.email.username=username
elasticjob.props.email.password=password
elasticjob.props.email.useSsl=true
elasticjob.props.email.subject=ElasticJob error message
elasticjob.props.email.from=from@xxx.xx
elasticjob.props.email.to=to1@xxx.xx,to2@xxx.xx
elasticjob.props.email.cc=cc@xxx.xx
elasticjob.props.email.bcc=bcc@xxx.xx
elasticjob.props.email.debug=false

#配置微信提醒策略屬性
elasticjob.props.wechat.webhook=you_webhook
elasticjob.props.wechat.connectTimeout=3000
elasticjob.props.wechat.readTimeout=5000

#配置釘釘提醒策略屬性
elasticjob.props.dingtalk.webhook=you_webhook
elasticjob.props.dingtalk.keyword=you_keyword
elasticjob.props.dingtalk.secret=you_secret
elasticjob.props.dingtalk.connectTimeout=3000
elasticjob.props.dingtalk.readTimeout=5000
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末负甸,一起剝皮案震驚了整個濱河市虹蓄,隨后出現(xiàn)的幾起案子趾诗,更是在濱河造成了極大的恐慌蜡感,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恃泪,死亡現(xiàn)場離奇詭異郑兴,居然都是意外死亡,警方通過查閱死者的電腦和手機贝乎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進(jìn)店門情连,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人览效,你說我怎么就攤上這事却舀。” “怎么了锤灿?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵挽拔,是天一觀的道長。 經(jīng)常有香客問我衡招,道長,這世上最難降的妖魔是什么每强? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任始腾,我火速辦了婚禮,結(jié)果婚禮上空执,老公的妹妹穿的比我還像新娘浪箭。我一直安慰自己,他們只是感情好辨绊,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布奶栖。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宣鄙。 梳的紋絲不亂的頭發(fā)上袍镀,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天,我揣著相機與錄音冻晤,去河邊找鬼苇羡。 笑死,一個胖子當(dāng)著我的面吹牛鼻弧,可吹牛的內(nèi)容都是我干的设江。 我是一名探鬼主播,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼攘轩,長吁一口氣:“原來是場噩夢啊……” “哼叉存!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起度帮,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤歼捏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后够傍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體甫菠,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年冕屯,在試婚紗的時候發(fā)現(xiàn)自己被綠了寂诱。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡安聘,死狀恐怖痰洒,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情浴韭,我是刑警寧澤丘喻,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站念颈,受9級特大地震影響泉粉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜榴芳,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一嗡靡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧窟感,春花似錦枕荞、人聲如沸粟害。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽哩至。三九已至,卻和暖如春蜜自,著一層夾襖步出監(jiān)牢的瞬間菩貌,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工袁辈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留菜谣,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓晚缩,卻偏偏與公主長得像尾膊,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子荞彼,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容