SpringBoot集成ElaticJob定时器的实现代码

网友投稿 244 2023-01-29


SpringBoot集成ElaticJob定时器的实现代码

本文介绍了SpringBoot集成ElaticJob定时器的实现代码,分享给大家,具体如下:

POM文件配置

xmlns:xsi="http://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">

4.0.0

com.example

demojob

0.0.1-SNAPSHOT

jar

demojob

Demo project for Spring Boot

<groupId>org.springframework.boot

spring-boot-starter-parent

2.0.2.RELEASE

UTF-8

UTF-8

1.8

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-test

test

elastic-job-common-core

com.dangdang

2.1.5

elastic-job-lite-core

com.dangdang

2.1.5

elastic-job-lite-spring

com.dangdang

2.1.5

elastic-job-cloud-executor

com.dangdang

2.1.5

org.mariadb.jdbc

mariadb-java-client

1.5.4

com.alibaba

druid-spring-boot-starter

1.1.9

com.baomidou

mybatisplus-spring-boot-starter

1.0.5

com.baomidou

mybatis-plus

2.1.9

org.springframework.boot

spring-boot-maven-plugin

xmlns:xsi="http://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">

4.0.0

com.example

demojob

0.0.1-SNAPSHOT

jar

demojob

Demo project for Spring Boot

<groupId>org.springframework.boot

spring-boot-starter-parent

2.0.2.RELEASE

UTF-8

UTF-8

1.8

org.springframework.boot

spring-boot-starter-web

org.springframework.boot

spring-boot-starter-test

test

elastic-job-common-core

com.dangdang

2.1.5

elastic-job-lite-core

com.dangdang

2.1.5

elastic-job-lite-spring

com.dangdang

2.1.5

elastic-job-cloud-executor

com.dangdang

2.1.5

org.mariadb.jdbc

mariadb-java-client

1.5.4

com.alibaba

druid-spring-boot-starter

1.1.9

com.baomidou

mybatisplus-spring-boot-starter

1.0.5

com.baomidou

mybatis-plus

2.1.9

org.springframework.boot

spring-boot-maven-plugin

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

# 配置定时器规则

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;

/**

* 注册中心配置

* 用于注册和协调作业分布式行为的组件,目前仅支持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;

/**

* 如果想把作业运行的内容写到DB中,我们需要用到另一个构造器,

* 同时定义自己的JobEventConfiguration,

* 目前来说实现这个接口的只有一个类JobEventRdbConfiguration,

* 通过这个可以将作业运行的痕迹进行持久化到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,

http:// 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秒执行一次控制台输出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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:群晖连接共享文件夹(群晖存储服务器文件夹共享)
下一篇:vue 项目打包通过命令修改 vue
相关文章

 发表评论

暂时没有评论,来抢沙发吧~