分布式任务调度平台XXL-JOB

。_饼干妹妹 提交于 2019-12-10 01:41:38

源码和教程

github源码

中文教程

实战

部署任务调度中心

jar部署

参考中文教程即可部署

docker部署

部署任务调度中心和Mysql(使用docker-compose)
version: '3'
services:
  mysql-xxljob:
    image: mysql
    container_name: mysql-xxljob
    ports:
      - 3306:3306
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: '123456'
    command:
      --default-authentication-plugin=mysql_native_password
      --character-set-server=utf8mb4
      --collation-server=utf8mb4_general_ci
      --explicit_defaults_for_timestamp=true
      --lower_case_table_names=1
      --max_allowed_packet=128M
    volumes:
      - mysql-data:/var/lib/mysql
      - mysql-logs:/var/log/mysql
      - mysql-conf:/etc/mysql
    networks:
      - mysql_network
  xxl-job:
    image: xuxueli/xxl-job-admin:2.1.0
    container_name: xxl-job
    depends_on:
      - mysql-xxljob
    volumes:
      - /usr/local/docker/xxljob/applogs:/data/applogs
      - /usr/local/docker/xxljob/application.propertie:/application.propertie
    ports:
      - 80:8080
    environment:
      TZ: Asia/Shanghai
      PARAMS: '--spring.config.location=/application.propertie'
    networks:
      - xxl-job
networks:
  mysql_network:
  xxl-job:
volumes:
  mysql-data:
  mysql-logs:
  mysql-conf:
导入sql脚本(教程中有)
PARAMS设置容器加载配置文件
### web
server.port=8080
server.context-path=/xxl-job-admin

### actuator
management.context-path=/actuator
management.health.mail.enabled=false

### resources
spring.mvc.static-path-pattern=/static/**
spring.resources.static-locations=classpath:/static/

### freemarker
spring.freemarker.templateLoaderPath=classpath:/templates/
spring.freemarker.suffix=.ftl
spring.freemarker.charset=UTF-8
spring.freemarker.request-context-attribute=request
spring.freemarker.settings.number_format=0.##########

### mybatis
mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml

### xxl-job, datasource
spring.datasource.url=jdbc:mysql://192.168.1.130:3306/xxl_job?Unicode=true&characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
spring.datasource.tomcat.max-wait=10000
spring.datasource.tomcat.max-active=30
spring.datasource.tomcat.test-on-borrow=true
spring.datasource.tomcat.validation-query=SELECT 1
spring.datasource.tomcat.validation-interval=30000

### xxl-job email
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=xxx@qq.com
spring.mail.password=xxx
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory

### xxl-job, access token
xxl.job.accessToken=

### xxl-job, i18n (default empty as chinese, "en" as english)
xxl.job.i18n=

## xxl-job, triggerpool max size
xxl.job.triggerpool.fast.max=200
xxl.job.triggerpool.slow.max=100

### xxl-job, log retention days
xxl.job.logretentiondays=30

配置执行器项目

1. 配置pom文件,增加xxl-job-core依赖
<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>2.1.0</version>
</dependency>

2. 修改application.yml文件
server:
  port: 8081
xxl:
  job:
    admin:
      addresses: http://192.168.1.130/xxl-job-admin
    executor:
      appname: xxl-job-executor-sample
      ip:
      port: 9999
      logretentiondays: 30
      logpath:
    accessToken:
3. XxlJobConfig配置类
@Configuration
public class XxlJobConfig {
    private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);

    @Value("${xxl.job.admin.addresses}")
    private String adminAddresses;

    @Value("${xxl.job.executor.appname}")
    private String appName;

    @Value("${xxl.job.executor.ip}")
    private String ip;

    @Value("${xxl.job.executor.port}")
    private int port;

    @Value("${xxl.job.accessToken}")
    private String accessToken;

    @Value("${xxl.job.executor.logpath}")
    private String logPath;

    @Value("${xxl.job.executor.logretentiondays}")
    private int logRetentionDays;


    @Bean
    public XxlJobSpringExecutor xxlJobExecutor() {
        logger.info(">>>>>>>>>>> xxl-job config init.");
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
        xxlJobSpringExecutor.setAppName(appName);
        xxlJobSpringExecutor.setIp(ip);
        xxlJobSpringExecutor.setPort(port);
        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);

        return xxlJobSpringExecutor;
    }
}
4. 任务类HelloHandler
/**
 * @author wzh
 * @date 2019/12/9 - 16:13
 * 开发步骤:
 * 继承"IJobHandler":“com.xxl.job.core.handler.IJobHandler”;
 * 注册到Spring容器:添加“@Component”注解,被Spring容器扫描为Bean实例;
 * 注册到执行器工厂:添加“@JobHandler(value="自定义jobhandler名称")”注解,注解value值对应的是调度中心新建任务的JobHandler属性的值。
 * 执行日志:需要通过 "XxlJobLogger.log" 打印执行日志;
 */
@JobHandler(value = "helloHandler")
@Component
public class HelloHandler extends IJobHandler {
    @Override
    public ReturnT<String> execute(String s) throws Exception {
        XxlJobLogger.log("Hello Handler is deal");
        Thread.sleep(1000);
        return ReturnT.SUCCESS;
    }
}

遇见的问题

1. 执行器启动报错
2. 执行器不能注册进任务中心
最后使用了制作镜像+xxl-job-core的2.1.2-SNAPSHOT版解决(拉取时拉的快照版..)

制作镜像

Dockerfile
FROM openjdk:8-jre
MAINTAINER xuxueli

ENV PARAMS=""

ENV TZ=PRC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

ADD xxl-job-admin-*.jar /app.jar

ENTRYPOINT ["sh","-c","java -jar /app.jar $PARAMS"]

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!