所需材料

compile "com.dangdang:elastic-job-lite-core:2.1.5"
compile "com.dangdang:elastic-job-lite-spring:2.1.5"
compile 'org.springframework.cloud:spring-cloud-starter-consul-discovery
compile 'org.springframework.cloud:spring-cloud-starter-consul-config:2.1.1.RELEASE'
compile 'org.springframework.cloud:spring-cloud-starter-consul-discovery:2.1.1.RELEASE'

启用sirius-quartz项目,总体结构如下


配置文件信息

  • application.yml:
server:port: 8011
spring:profiles:active: devapplication:name: quartz-serversecurity:user:name: adminpassword: 12345datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://10.0.21.66:3306/sirius?useUnicode=true&characterEncoding=UTF-8username: 9now_devpassword: 9now.321mail:host: ${mail.config.host}port: ${mail.config.port}username: ${mail.config.username}password: ${mail.config.password}properties:mail.smtp.auth: truemybatis:type-aliases-package:com.cloud.sirius.demo.service.entitymapper-locations:classpath:mybatis/*.xmlmapper:mappers:tk.mybatis.mapper.common.MappernotEmpty:true
  • bootstrap.yml:
spring:cloud:consul:discovery:hostname: localhostport: 8500tags: version=1.0,author=hmdbbinstance-id: ${spring.application.name}:${spring.cloud.client.ipAddress}:${spring.application.instance_id:${server.port}}enabled: trueservice-name: ${spring.application.name}config:# 快速失败fail-fast: true#启用enabled: true#consul上面文件的格式  YAML FILES PROPERTIES KEY-VALUEformat: YAML# 基本文件夹prefix: config# 所有应用程序默认文件夹名defaultContext: application#设置分隔符的值,用于使用配置文件在属性源中分隔配置文件名称profileSeparator: ','data-key: datawatch:#调用的频率 1000 毫秒delay: 1000
logging:config:classpath:logback-test.xml
  • logback-test.xml
<configuration><!-- %m输出的信息,%p日志级别,%t线程名,%d日期,%c类的全名,%i索引【从数字0开始递增】,,, --><!-- appender是configuration的子节点,是负责写日志的组件。 --><!-- ConsoleAppender:把日志输出到控制台 --><appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d %p [%t] (%c:%line\): %m%n</pattern><!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 --><charset>UTF-8</charset></encoder></appender><!-- RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 --><!-- 以下的大概意思是:1.先按日期存日志,日期变了,将前一天的日志文件名重命名为XXX%日期%索引,新的日志仍然是sys.log --><!--             2.如果日期没有发生变化,但是当前日志的文件大小超过1KB时,对当前日志进行分割 重命名--><appender name="SERVICE_LOG_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"><File>log/sys.log</File><!-- rollingPolicy:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。 --><!-- TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动 --><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><!-- 活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 --><!-- 文件名:log/sys.2017-12-05.0.log --><fileNamePattern>log/sys.%d.%i.log</fileNamePattern><!-- 每产生一个日志文件,该日志文件的保存期限为30天 --><maxHistory>30</maxHistory><timeBasedFileNamingAndTriggeringPolicy  class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP"><!-- maxFileSize:这是活动文件的大小,默认值是10MB,本篇设置为1KB,只是为了演示 --><maxFileSize>100MB</maxFileSize></timeBasedFileNamingAndTriggeringPolicy></rollingPolicy><encoder><!-- pattern节点,用来设置日志的输入格式 --><pattern>%d %p [%t] (%c:%line\): %m%n</pattern><!-- 记录日志的编码 --><charset>UTF-8</charset> <!-- 此处设置字符集 --></encoder></appender><!-- 控制台输出日志级别 --><root level="info"><appender-ref ref="STDOUT" /><appender-ref ref="SERVICE_LOG_FILE" /></root><!-- 指定项目中某个包,当有日志操作行为时的日志记录级别 --><!-- com.cloud.sirius为根包,也就是只要是发生在这个根包下面的所有日志操作行为的权限都是DEBUG --><!-- 级别依次为【从高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE  --><logger name="com.cloud.sirius" level="DEBUG" additivity="false"><appender-ref ref="STDOUT" /></logger>
</configuration>

自定义抽象类AbstractJob,实现SimpleJob,方便抽象出公共的工具类,以及方便后续aop的使用

package com.cloud.sirius.demo.quartz.job;import com.cloud.sirius.demo.utils.log.SiriusLogger;
import com.dangdang.ddframe.job.api.ShardingContext;
import com.dangdang.ddframe.job.api.simple.SimpleJob;
import org.slf4j.Logger;
import org.springframework.web.context.support.SpringBeanAutowiringSupport;public abstract class AbstractJob implements SimpleJob {protected Logger logger = new SiriusLogger(this.getClass());//    protected void clear() {
//        DbContextHolder.clearDbType();
//        TraceUtil.INSTANCE.clear();
//    }/*** 执行定时任务*/public abstract void run(ShardingContext context);@Overridepublic void execute(ShardingContext context) {run(context);}protected void springBeanAutowiringSupport() {SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);}
}

DemoJob

package com.cloud.sirius.demo.quartz.job;import com.dangdang.ddframe.job.api.ShardingContext;
import org.springframework.stereotype.Component;/*** @author xu.guanguo* @time 2019/6/28* @description*/
@Component("bieYangRemindJob")
public class BieYangRemindJob extends AbstractJob{@Overridepublic void run(ShardingContext shardingContext) {System.out.println(String.format("------Thread ID: %s, 任务总片数: %s, " +"当前分片项: %s.当前参数: %s,"+"当前任务名称: %s.当前任务参数: %s" ,Thread.currentThread().getId(),shardingContext.getShardingTotalCount(),shardingContext.getShardingItem(),shardingContext.getShardingParameter(),shardingContext.getJobName(),shardingContext.getJobParameter()));}
}

zk的配置

package com.cloud.sirius.demo.quartz.config;import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperConfiguration;
import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperRegistryCenter;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Data
@Configuration
public class ElasticJobConfig {@Value("${quartz.app.zkAddress}")private String zkNodes;@Value("${quartz.app.namespace}")private String namespace;@Beanpublic ZookeeperConfiguration zkConfig() {return new ZookeeperConfiguration(zkNodes, namespace);}@Bean(initMethod = "init")public ZookeeperRegistryCenter regCenter(ZookeeperConfiguration config) {return new ZookeeperRegistryCenter(config);}
}

job总管理类

package com.cloud.sirius.demo.quartz.config;import com.dangdang.ddframe.job.api.simple.SimpleJob;
import com.dangdang.ddframe.job.config.JobCoreConfiguration;
import com.dangdang.ddframe.job.config.simple.SimpleJobConfiguration;
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 org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** @author xu.guanguo* @time 2019/6/28* @description*/
@Configuration
public class SiriusJobs {@Autowiredprivate ZookeeperRegistryCenter regCenter;@Bean(initMethod = "init")public JobScheduler bieYangRemindJobScheduler(@Autowired @Qualifier("bieYangRemindJob") SimpleJob simpleJob,@Value("${quartz.app.billCronExpress}") final String cron,@Value("${quartz.app.shardingCount}") int shardingCount,@Value("${quartz.app.shardingItemParameters}") String shardingItemParameters) {return new SpringJobScheduler(simpleJob, regCenter, getLiteJobConfiguration(simpleJob.getClass(), cron, shardingCount, shardingItemParameters));}/*** @Description 任务配置类*/private LiteJobConfiguration getLiteJobConfiguration(final Class<? extends 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();}
}

项目的总初始化类BeanInjector

package com.cloud.sirius.demo.quartz.config;import com.cloud.sirius.demo.base.AbstractInjector;
import com.cloud.sirius.demo.utils.mail.MailConfig;
import com.cloud.sirius.demo.utils.mail.MailUtil;
import org.I0Itec.zkclient.ZkClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Bean;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.stereotype.Component;@Component
@RefreshScope
public class BeanInjector extends AbstractInjector {@Autowiredprivate JavaMailSender javaMailSender;@Autowiredprivate MailConfig mailConfig;@Autowiredprivate QuartzAppConfig appConfig;@Bean@RefreshScopepublic MailUtil mailUtil() {MailUtil mailUtil = new MailUtil(javaMailSender, mailConfig);return mailUtil;}private ZkClient zkClient = null;@Bean(name = "zkClient")public ZkClient zkClient() {if (zkClient != null) {return zkClient;}zkClient = new ZkClient(appConfig.getZkAddress());return zkClient;}}

启动跑一跑?

没啥问题收工✋

SpringCloud项目搭建(六) —elastic-job的使用,以及consul的配置使用(衔接上篇)相关推荐

  1. SpringCloud项目搭建步骤

    SpringCloud项目搭建步骤 springCloud五大核心组件 五大核心组件如下: 服务发现--Netflix Eureka客户端 负载均衡--Netflix Ribbon 断路器--Netf ...

  2. IDEA项目搭建六——使用Eureka和Ribbon进行项目服务化

    一.Eureka的作用 这里先简单说明使用eureka进行业务层隔离,实现项目服务化也可以理解为微服务,我一直崇尚先实现代码再学习理论,先简单上手进行操作,eureka使用分为三块,1是服务注册中心, ...

  3. SpringCloud 项目搭建

    1. 技术选型 springcloud管理的微服务架构众多,为了不用在项目后期解决环境冲突问题,请严格按照官网给出的 boot 与cloud 对应关系进行选型. SpringCloud官网地址 版本对 ...

  4. 手把手教你搭建SpringCloud项目(十六)集成Stream消息驱动

    Spring Cloud全集文章目录: 零.什么是微服务?一看就会系列! 一.手把手教你搭建SpringCloud项目(一)图文详解,傻瓜式操作 二.手把手教你搭建SpringCloud项目(二)生产 ...

  5. 手把手教你搭建SpringCloud项目(十)集成Hystrix之服务降级

    Spring Cloud全集文章目录: 零.什么是微服务?一看就会系列! 一.手把手教你搭建SpringCloud项目(一)图文详解,傻瓜式操作 二.手把手教你搭建SpringCloud项目(二)生产 ...

  6. 手把手教你搭建SpringCloud项目(九)集成OpenFeign服务接口调用

    Spring Cloud全集文章目录: 零.什么是微服务?一看就会系列! 一.手把手教你搭建SpringCloud项目(一)图文详解,傻瓜式操作 二.手把手教你搭建SpringCloud项目(二)生产 ...

  7. 后台管理系统项目搭建

    项目搭建规范 一. 代码规范 1.1. 集成editorconfig配置 EditorConfig 有助于为不同 IDE 编辑器上处理同一项目的多个开发人员维护一致的编码风格. # http://ed ...

  8. Spring MVC + Mybatis项目搭建

    1.参考<Java Spring MVC项目搭建(一)--Spring MVC框架集成>配置spring mvc需要的jar包及eclipse配置(主要是针对servlet-api.jar ...

  9. 《SpringCloud超级入门》Spring Boot项目搭建步骤(超详细)《六》

    目录 编写第一个 REST 接口 读取配置文件 profiles 多环境配置 热部署 actuator 监控 自定义 actuator 端点 统一异常处理 异步执行 随机端口 编译打包 在 Sprin ...

最新文章

  1. springboot的jsp应该放在哪_web项目jsp放在哪里 Spring Boot 静态资源处理(4)
  2. php.ini utc时间,wordpress的UTC时间与本地时间相差8个小时解决方法
  3. HDU 1166(线段树)
  4. sql 树状结构中知道 父节点与孙节点_sqlserver树状结构表中,获取指定节点的所有父节点路径_MySQL...
  5. c# xml文件新增同级节点_[C#.NET 拾遗补漏]08:强大的LINQ
  6. 晶振测试与使用中的主要问题(z)
  7. php smarty 序号,php – Smarty缩进和代码格式
  8. 趣挨踢 | “菜鸟”程序员和“大神”程序员的差别竟然这么大...
  9. asp.net mvc 性能测试工具 - Glimpse
  10. Tensorflow2.0数据和部署(一)——基于浏览器的模型与TensorFlow.js
  11. c# winform读取xml文件创建菜单的代码
  12. Bioedit 使用
  13. 谷歌学术高级搜索技巧
  14. notes on Scaling Ethereum with Raul Jordan and Preston Van Loon
  15. 3年试点即将到期,电子印章将成网络货运新动力
  16. 牛腩——遇到的问题总结
  17. Python学习 - 冯诺伊曼体系结构建模与模拟 之TOY模型机
  18. 弘辽科技:拼多多转化率怎么看?4个步骤教会你
  19. WHUT C语言计费(网吧)管理系统
  20. STM32毕业设计题目大全 选题推荐

热门文章

  1. 计算机软件职称高校四川,四川省人社厅:今年部分高校职称自主评审
  2. 计算机键盘标注,电脑键盘上怎么打√和*两个符号的方法
  3. 不讲武德的Python反爬神器『fake_useragent』
  4. 一个男网友娶到一个女网友后在洞房发生的事情
  5. 为何爱会伤人/为家爱会伤人
  6. 共轭相似以及共轭对角化
  7. FCOS搭建环境bug
  8. c语言迷宫问题程序流程图,c语言程序设计 迷宫问题
  9. uva10158(并查集)
  10. 排污单位生产设施及污染治理设施用电(能)监控系统原理、作用、组成及功能