前言:
现时同学们对“init源码”可能比较重视,咱们都想要知道一些“init源码”的相关文章。那么小编同时在网络上搜集了一些对于“init源码””的相关文章,希望小伙伴们能喜欢,姐妹们快快来了解一下吧!在业务中,我们经常会需要定时去执行一些特定的任务,比如每天凌晨,要把昨天的数据进行统计,诸如此类,这就是我们所说的任务调度。
在java项目中,我们之前一般用得比较多的是quartz,还有spring自己的schedule,相比而言quartz支持的api更多,但是在分布式场景中,都会面临job被重复执行的问题。
当然,如果就要这么用的话,我们可以通过分布式锁,或者,单节点部署job然后,调用服务的方式去避免job的重复执行。
那么,有没有其他天然支持的方案呢?这里,我们介绍下xxl-job,官方的介绍是分布式任务调度平台。这个就有点类似我们微服务的注册中心,各个节点把调度任务注册到管理平台,任务在管理系统这边统一调度,执行的时候,选择一个节点去执行就可以了,不会引起多个节点同时执行的情况。
下面我们来体验下xxl-job
1.从github下载源码
这里我们主要需要的是xxl-job-admin,这是调度平台的管理端。
2.导入sql
源码下的doc/db 下的sql文件是xxl-job-admin的建表sql
数据执行之后
3.启动xxl-job-admin项目
修改xxl-job-admin的配置文件,主要是数据库信息,然后就可以启动项目
用户名:admin
密码:123456
进去之后会看到管理界面如下
4.写一个应用来执行调度任务
4.1 写配置文件类
@Data@SuperBuilder@AllArgsConstructor@NoArgsConstructor@ConfigurationProperties(prefix = "xxl.job")public class XxlJobProperties { private String adminAddresses; private String accessToken; private Executor executor; @Data @SuperBuilder @AllArgsConstructor @NoArgsConstructor public static class Executor{ private String appName; private String address; private String ip; private int port; private String logPath; private int logRetentionDays; }}
4.2配置bean
@Slf4j@RequiredArgsConstructor@Configuration@EnableConfigurationProperties(value = { XxlJobProperties.class})public class XxlJobConfiguration { private final XxlJobProperties xxlJobProperties; @Bean public XxlJobSpringExecutor xxlJobExecutor() { log.info(">>>>>>>>>>> xxl-job config init."); XxlJobProperties.Executor executor = xxlJobProperties.getExecutor(); XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor(); xxlJobSpringExecutor.setAdminAddresses(xxlJobProperties.getAdminAddresses()); xxlJobSpringExecutor.setAppname(executor.getAppName()); xxlJobSpringExecutor.setAddress(executor.getAddress()); xxlJobSpringExecutor.setIp(executor.getIp()); xxlJobSpringExecutor.setPort(executor.getPort()); xxlJobSpringExecutor.setAccessToken(xxlJobProperties.getAccessToken()); xxlJobSpringExecutor.setLogPath(executor.getLogPath()); xxlJobSpringExecutor.setLogRetentionDays(executor.getLogRetentionDays()); return xxlJobSpringExecutor; }}
4.3 写个job用来测试
@Slf4j@Componentpublic class XxlSchedule { @XxlJob("demoJobHandler") public void demoJobHandler() throws Exception { XxlJobHelper.log("XXL-JOB, Hello World."); log.info("XXL-JOB, Hello World."); for (int i = 0; i < 5; i++) { XxlJobHelper.log("beat at:" + i); log.info("beat at:" + i); TimeUnit.SECONDS.sleep(2); } // default success }}
4.4 配置文件
# web portserver.port=8081# no web#spring.main.web-environment=false# log config#logging.config=classpath:logback.xml### xxl-job admin address list, such as "; or ";xxl.job.admin-addresses= xxl-job, access tokenxxl.job.accessToken=### xxl-job executor appnamexxl.job.executor.app-name=xxl-job-executor-sample### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is nullxxl.job.executor.address=### xxl-job executor server-infoxxl.job.executor.ip=xxl.job.executor.port=9999### xxl-job executor log-pathxxl.job.executor.logpath=/Users/bane/data/logs/jobhandler### xxl-job executor log-retention-daysxxl.job.executor.logretentiondays=30
4.4 启动服务,然后去admin界面看到,已经有了一个执行器 ,就是注册成功了
5.执行任务试试
5.1执行1次
控制台输入如下
5.2设置任务每秒执行
启动
可以看到任务在不断地被执行了
以上是xxl-job的demo执行,我们在实际业务中根据自己的情况进行调整即可。
另外的话还有个powerjob,看介绍好像更厉害一点,不过ui还没有,后续有机会也来调研下。
标签: #init源码