This article introduces the implementation code of SpringBoot integrated ElaticJob timer. Share it with you. The details are as follows:
POM file configuration
<?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> </dependency> </dependencies> <build> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build></project>
Yaml file configuration (can also use application.properties)
# Configure configuration data source 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# Configure ZookeeperregCenter: serverList: localhost:2181 namespace: hulk_order_task# Configure timer rules simpleJob: cron: 0/5 * * * * ? shardingTotalCount: 1 shardingItemParameters: 0=1
Start writing code
RegistryCenterConfig
package com.example.demojob.config;import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperConfiguration;import com.dangdang.ddframe.job.reg.zookeeper.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;/** * Registration Center Configuration* Component for registering and coordinating job distributed behavior, currently only supports 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;/** * If you want to write the contents of the job running into the DB, we need to use another constructor, * At the same time, define your own JobEventConfiguration. * Currently, there is only one class that implements this interface. * Through this, you can persist the traces of job running to DB. * @author shudalei */@Configurationpublic 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;@Configurationpublic class SimpleJobConfig { /** * Registration Center*/ @Resource private ZookeeperRegistryCenter regCenter; /** * job event configuration*/ @Resource private JobEventConfiguration jobEventConfiguration; /** * WeChat access token get task object* */ @Resource private TestSimpleJob simpleJob; /** * * @param cron Timed task cron configuration* @param shardingTotalCount Number of task shards* @param shardingItemParameters Task sharding parameters* @return JobScheduler Task Scheduler*/ @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 Task Scheduling Class* @param cron Timed Task Cron Configuration* @param shardingTotalCount Number of task shards* @param shardingItemParameters Task Sharding Parameters* @return LiteJobConfiguration Task Configuration*/ 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, the timer task itself
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;@Componentpublic class TestSimpleJob implements SimpleJob { private int count; //The task is to execute the console output 1, 2, 3 every 5 seconds... @Override public void execute(ShardingContext shardingContext) { count++; System.out.println("task " + count); }} Finally, install Zookeeper under Docker
The installation script compose file is as follows
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:38888
The above is all the content of this article. I hope it will be helpful to everyone's learning and I hope everyone will support Wulin.com more.