SpringBoot集成ElaticJob定時器的實現(xiàn)代碼
本文介紹了SpringBoot集成ElaticJob定時器的實現(xiàn)代碼,分享給大家,具體如下:
POM文件配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>demojob</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>demojob</name>
<description>Demo project for Spring Boot</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.2.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--elastic-job-->
<dependency>
<artifactId>elastic-job-common-core</artifactId>
<groupId>com.dangdang</groupId>
<version>2.1.5</version>
</dependency>
<dependency>
<artifactId>elastic-job-lite-core</artifactId>
<groupId>com.dangdang</groupId>
<version>2.1.5</version>
</dependency>
<dependency>
<artifactId>elastic-job-lite-spring</artifactId>
<groupId>com.dangdang</groupId>
<version>2.1.5</version>
</dependency>
<dependency>
<artifactId>elastic-job-cloud-executor</artifactId>
<groupId>com.dangdang</groupId>
<version>2.1.5</version>
</dependency>
<!--mariadb-->
<dependency>
<groupId>org.mariadb.jdbc</groupId>
<artifactId>mariadb-java-client</artifactId>
<version>1.5.4</version>
</dependency>
<!--druid-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.9</version>
</dependency>
<!--mybatis plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatisplus-spring-boot-starter</artifactId>
<version>1.0.5</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>2.1.9</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
yaml文件配置(也可以用application.properties一樣的)
# 配置配置數據源 spring: datasource: type: com.alibaba.druid.pool.DruidDataSource driver-class-name: org.mariadb.jdbc.Driver name: elastic-job-event url: jdbc:mariadb://127.0.0.1:3306/elasticjob username: root password: 123456 druid: validationQuery: SELECT 1 initialSize: 10 minIdle: 10 maxActive: 200 minEvictableIdleTimeMillis: 180000 testOnBorrow: false testWhileIdle: true removeAbandoned: true removeAbandonedTimeout: 1800 logAbandoned: true poolPreparedStatements: true maxOpenPreparedStatements: 100 # 配置Zookeeper regCenter: serverList: localhost:2181 namespace: hulk_order_task # 配置定時器規(guī)則 simpleJob: cron: 0/5 * * * * ? shardingTotalCount: 1 shardingItemParameters: 0=1
開始寫代碼
RegistryCenterConfig
package com.example.demojob.config;
import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperConfiguration;
import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperRegistryCenter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 注冊中心配置
* 用于注冊和協(xié)調作業(yè)分布式行為的組件,目前僅支持Zookeeper。
* @author shudalei
*/
@Configuration
@ConditionalOnExpression("'${regCenter.serverList}'.length() > 0")
public class RegistryCenterConfig {
@Bean(initMethod = "init")
public ZookeeperRegistryCenter regCenter(@Value("${regCenter.serverList}") final String serverList,
@Value("${regCenter.namespace}") final String namespace) {
return new ZookeeperRegistryCenter(new ZookeeperConfiguration(serverList, namespace));
}
}
JobEventConfig
package com.example.demojob.config;
import com.dangdang.ddframe.job.event.JobEventConfiguration;
import com.dangdang.ddframe.job.event.rdb.JobEventRdbConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.annotation.Resource;
import javax.sql.DataSource;
/**
* 如果想把作業(yè)運行的內容寫到DB中,我們需要用到另一個構造器,
* 同時定義自己的JobEventConfiguration,
* 目前來說實現(xiàn)這個接口的只有一個類JobEventRdbConfiguration,
* 通過這個可以將作業(yè)運行的痕跡進行持久化到DB的操作。
* @author shudalei
*/
@Configuration
public class JobEventConfig {
@Resource
private DataSource dataSource;
@Bean
public JobEventConfiguration jobEventConfiguration() {
return new JobEventRdbConfiguration(dataSource);
}
}
SimpleJobConfig
package com.example.demojob.config;
import com.dangdang.ddframe.job.config.JobCoreConfiguration;
import com.dangdang.ddframe.job.config.simple.SimpleJobConfiguration;
import com.dangdang.ddframe.job.event.JobEventConfiguration;
import com.dangdang.ddframe.job.lite.api.JobScheduler;
import com.dangdang.ddframe.job.lite.config.LiteJobConfiguration;
import com.dangdang.ddframe.job.lite.spring.api.SpringJobScheduler;
import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperRegistryCenter;
import com.example.demojob.job.TestSimpleJob;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import javax.annotation.Resource;
@Configuration
public class SimpleJobConfig {
/**
* 注冊中心
*/
@Resource
private ZookeeperRegistryCenter regCenter;
/**
* job事件配置
*/
@Resource
private JobEventConfiguration jobEventConfiguration;
/**
* 微信access token獲取任務對象
*
*/
@Resource
private TestSimpleJob simpleJob;
/**
*
* @param cron 定時任務cron配置
* @param shardingTotalCount 任務分片數
* @param shardingItemParameters 任務分片參數
* @return JobScheduler 任務調度器
*/
@Bean(initMethod = "init")
public JobScheduler simpleJobScheduler(@Value("${simpleJob.cron}") final String cron,
@Value("${simpleJob.shardingTotalCount}") final int shardingTotalCount,
@Value("${simpleJob.shardingItemParameters}") final String shardingItemParameters) {
return new SpringJobScheduler(simpleJob, regCenter,
getLiteJobConfiguration(simpleJob.getClass(), cron, shardingTotalCount, shardingItemParameters),
jobEventConfiguration);
}
/**
*
* @param jobClass 任務調度類
* @param cron 定時任務cron配置
* @param shardingTotalCount 任務分片數
* @param shardingItemParameters 任務分片參數
* @return LiteJobConfiguration 任務配置
*/
private LiteJobConfiguration getLiteJobConfiguration(final Class<? extends com.dangdang.ddframe.job.api.simple.SimpleJob> jobClass, final String cron,
final int shardingTotalCount, final String shardingItemParameters) {
return LiteJobConfiguration
.newBuilder(
new SimpleJobConfiguration(JobCoreConfiguration.newBuilder(jobClass.getName(), cron, shardingTotalCount)
.shardingItemParameters(shardingItemParameters).build(), jobClass.getCanonicalName()))
.overwrite(true).build();
}
}
TestSimpleJob,定時器任務本身
package com.example.demojob.job;
import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.api.simple.SimpleJob;
import org.springframework.stereotype.Component;
@Component
public class TestSimpleJob implements SimpleJob {
private int count;
//任務就是每5秒執(zhí)行一次控制臺輸出1,2,3……
@Override
public void execute(ShardingContext shardingContext) {
count++;
System.out.println("task " + count);
}
}
最后在Docker下安裝 Zookeeper
安裝腳本compose文件如下
version: '2' services: zookeeper01: image: zookeeper restart: always hostname: zookeeper01 ports: - 2181:2181 environment: ZOO_MY_ID: 1 ZOO_SERVERS: server.1=0.0.0.0:2888:3888 server.2=zookeeper02:2888:3888 server.3=zookeeper03:2888:3888 zookeeper02: image: zookeeper restart: always hostname: zookeeper02 ports: - 2182:2181 environment: ZOO_MY_ID: 2 ZOO_SERVERS: server.1=zookeeper01:2888:3888 server.2=0.0.0.0:2888:3888 server.3=zookeeper03:2888:3888 zookeeper03: image: zookeeper restart: always hostname: zookeeper03 ports: - 2183:2181 environment: ZOO_MY_ID: 3 ZOO_SERVERS: server.1=zookeeper01:2888:3888 server.2=zookeeper02:2888:3888 server.3=0.0.0.0:2888:3888
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
SpringBoot使用MyBatis-Flex實現(xiàn)靈活的數據庫訪問
MyBatisFlex是一款優(yōu)秀的持久層框架,本文主要介紹了SpringBoot使用MyBatis-Flex實現(xiàn)靈活的數據庫訪問,具有一定的參考價值,感興趣的可以了解一下2024-06-06
Spring源碼解析之循環(huán)依賴的實現(xiàn)流程
這篇文章主要介紹了Spring源碼解析之循環(huán)依賴的實現(xiàn)流程,文章基于Java的相關內容展開循環(huán)依賴的實現(xiàn)流程,需要的小伙伴可以參考一下2022-07-07
springboot整合JavaCV實現(xiàn)視頻截取第N幀并保存圖片
這篇文章主要為大家詳細介紹了springboot如何整合JavaCV實現(xiàn)視頻截取第N幀并保存為圖片,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下2023-08-08
如何利用Spring?MVC實現(xiàn)RESTful風格
這篇文章主要介紹了如何利用Spring?MVC實現(xiàn)RESTful風格,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02

