汇总:Spring Boot 整合定时任务,可以动态编辑的定时任务
优采云 发布时间: 2022-11-01 01:25汇总:Spring Boot 整合定时任务,可以动态编辑的定时任务
定时任务,宋歌写了很多文章文章给大家介绍。上次DIY了一个可以动态编辑的定时任务,还录制了一段配套视频:
相关信息链接点击这里:
春季限时任务结束!教你自定义可编辑定时任务!开发可配置的定时任务~Vue的第二个非典型用法,一个简单的管理页面
但是,我们当时写的那个不支持分布式环境。支持它并不难。我们使用了一个zookeeper或者redis作为公共信息中心,记录了定时任务的各种运行情况。有了这个,我们可以支持分布式环境。
今天不自己写,先来看看一个现成的框架:ElasticJob。有一个和他同名的xxljob,我们后面会介绍。
一、ElasticJob1.1简介
ElasticJob 是一个分布式作业调度解决方案,其官网为:
Elastic Job的前身是当当开源的分布式任务调度框架dd-job,但于2020年5月28日加入Apache基金会,成为Apache旗下的开源项目:
ElasticJob通过弹性调度、资源管控、作业治理等功能打造适合互联网场景的分布式调度解决方案,通过开放式架构设计提供多元化的作业生态。
使用 ElasticJob 可以让开发工程师不再担心任务的线性吞吐量提升等非功能性需求,从而可以更加专注于面向业务的编码设计;同时也可以解放运维工程师,让他们再也不用担心任务可用性和相关的管理需求,通过简单的添加服务节点就可以达到自动化运维的目的。
ElasticJob 是针对互联网生态系统和海量任务的分布式调度解决方案。它由两个独立的子项目组成,ElasticJob-Lite 和 ElasticJob-Cloud。
其中,ElasticJob-Lite 定位为轻量级去中心化解决方案,以 jar 的形式为分布式任务提供协调服务:
ElasticJob-Cloud采用自主研发的Mesos Framework解决方案,提供资源管理、应用分发、进程隔离等附加功能:
ElasticJob-Lite 与 ElasticJob-Cloud:
ElasticJob-Lite ElasticJob-Cloud Decentralization 是否不支持资源分配 支持job模式 常驻+瞬时部署依赖ZooKeeper ZooKeeper + Mesos
其各种产品使用统一的作业API,开发者只需开发一次,随意部署(即ElasticJob-Lite和ElasticJob-Cloud使用相同的API,但部署方式不同)。
1.2 功能列表 2. 实践
说了这么多,让我们通过一个简单的案例来体验一个 ElasticJob。毕竟有代码,感觉更真实。
首先我们创建一个 Spring Boot 项目并引入 web 依赖:
然后手动加入 ElasticJob 启动器:
org.apache.shardingsphere.elasticjob
elasticjob-lite-spring-boot-starter
3.0.1
接下来,我们创建一个作业。创建工作有几种不同的方法。我们先来看一个基于实现 SimpleJob 接口创建的作业:
/**
* @author 江南一点雨
* @微信公众号 江南一点雨
* @网站 http://www.itboyhub.com
* @国际站 http://www.javaboy.org
* @微信 a_java_boy
* @GitHub https://github.com/lenve
* @Gitee https://gitee.com/lenve
*/
@Component
public class MyFirstJob implements SimpleJob {
private static final Logger logger = LoggerFactory.getLogger(MyFirstJob.class);
@Override
public void execute(ShardingContext shardingContext) {
logger.info("作业名称:{};作业参数:{};分片总数:{};当前分片:{};分片参数:{};任务编号:{}",shardingContext.getJobName(),shardingContext.getJobParameter(),shardingContext.getShardingTotalCount(),shardingContext.getShardingItem(),shardingContext.getShardingParameter(),shardingContext.getTaskId());
}
}
当定时任务执行时,会触发execute方法。与计划任务相关的参数存储在参数 ShardingContext 中。这些参数都在 application.properties 中配置。我们继续看:
elasticjob.reg-center.server-lists=zoo1:2181,zoo2:2182,zoo3:2183
elasticjob.reg-center.namespace=javaboy
elasticjob.jobs.my-first-job.elastic-job-class=org.javaboy.elasticjob.job.MyFirstJob
elasticjob.jobs.my-first-job.cron=0/3 * * * * ?
elasticjob.jobs.my-first-job.sharding-total-count=1
elasticjob.jobs.my-first-job.overwrite=true
elasticjob.jobs.my-first-job.job-parameter=hello javaboy!
elasticjob.jobs.my-first-job.sharding-item-parameters=0=A,1=B,2=C
这里的配置分为两类:
使用ElasticJob需要注册中心zookeeper,这个很容易理解,因为ElasticJob支持分布式场景下的任务分片和高可用,所以需要一个调度中心,这个zk就是调度中心。我这里开了一个zk集群,里面有3个实例,三个zk地址用.分隔。同时,我们还需要配置一个命名空间。这个命名空间的作用是防止不同应用程序的计划任务之间发生冲突。我们给每个应用程序一个不同于其他应用程序的命名空间,这样就不用担心冲突了。
接下来是配置工作。
配置作业的前缀统一为elasticjob.jobs,后跟作业名称。作业名可以随意配置,但最好一眼就看出来是哪个作业。MyFirstJob#execute 方法中的 shardingContext.getJobName() 获取它的这个值。
我们这里一共配置了六个属性,我来一一解释:
OK,现在配置完成。
3.运行
现在我们直接启动 Spring Boot 项目。启动后,控制台会打印如下日志:
没问题,日志每三秒打印一次。
现在我们再次启动当前项目的一个实例,勾选Allow parallel run to start multiple instances(启动新实例时记得更改端口号):
新实例启动时,我们发现第一次启动的实例没有打印日志,而是打印第二次启动的实例的日志,这是因为我们配置的sharding-total-count为1 ,即一个实例中只有一个计划任务同时运行。
3、运维平台
ElasticJob 提供了一个运维平台,通过该平台可以对定时任务进行动态管理。运维平台地址:
运维平台使用步骤:
克隆项目: git clone 。进入目录:cd shardingsphere-elasticjob-ui。打包: mvn clean package -Prelease。打包完成后解压shardingsphere-elasticjob-ui/shardingsphere-elasticjob-ui-distribution/shardingsphere-elasticjob-lite-ui-bin-distribution/target/apache-shardingsphere-elasticjob-3.1.0-SNAPSHOT-lite-ui -bin .tar.gz 文件,然后执行其bin目录下的startup.sh脚本启动。
上面第三步打包很容易因为网络原因出错,所以如果打包失败,可以在公众号江南易鱼鱼后台回复shardingsphere-elasticjob-ui,获取松哥打包好的文件。
运维平台启动后,浏览器会跳转到登录页面,输入:8088,如下:
默认用户名和密码都是 root。
注册成功后,点击注册中心配置,然后选择添加按钮添加注册中心。添加注册中心后,运维平台会自动从注册中心读取定时任务信息:
如实填写即可。注意不要把命名空间写错。否则,将无法读取计划任务。
接下来点击connect按钮与zk建立连接:
点击作业维度可以查看作业的详细信息,包括作业名称、分片总数、cron表达式等:
背面有四个操作按钮:
点击服务器维度查看服务器信息:
4.总结
好了,今天就通过一个简单的案例给大家展示如何和小伙伴一起玩 ElasticJob。关于ElasticJob的其他玩法,我们稍后再讲~
本案例下载地址为:
最新信息:实时数据采集-免费实时数据采集工具
实时数据采集,如何采集实时数据。今天给大家分享一个免费的实时数据监控采集,只需输入域名,选择监控采集时间即可获取实时采集数据,请详情请参考以下图片!
网络营销是当今的趋势,成功的关键是搜索引擎优化。如果你想擅长SEO,我认为你需要掌握各种方法和技巧。实时数据采集借助自己的知识和工作经验,分析了SEO优化的重点内容,希望对大家有所帮助。如何针对搜索引擎进行优化?
SEO:内容为王,链接取胜
目前,搜索引擎升级算法的外部链接是主要的判断因素。外链已经成为搜索引擎判断网站权重的重要指标。链接内容相关性和锚文本导入成为判断排名算法的重要因素之一。提醒我们,网站内容的质量、实时数据采集页面本身的优化、网站内外链接的建设,依然是我们工作的基础。“内容为王,链接取胜”,是SEO优化的永恒真理。
SEO优化:网页HTML符合W3C标准
建议符合W3C标准的网页对搜索引擎有很大帮助,实时数据采集SEO优化不要使用新页面弹出、标签匹配等。
SEO优化:控制页面信噪比
在 SEO 优化中,网页 SNR 是指网页上文本内容与 HTML 代码的比率。从搜索引擎爬取系统中,首先下载整个网页,然后提取文本内容。对实时数据采集进行分析,去除HTML格式,去除噪音,然后对文本进行分段,尽可能的存储在索引库中。
提高网页信噪比的SEO优化方法主要是减少网页中的图片和flash,将HTML页面中的CSS样式转换为外部用户调用的CSS样式表,实时数据采集 并封装 CSS 和 JS 。这些方法可以有效地提高信噪比。
SEO应该是什么样子的,它是什么样子的?思考是徒劳的。至于怎么定位,怎么把它做成有价值的博客,直播数据采集但还是没有找到答案。
最初,这个博客是用来分享知识和搜索引擎优化的。但在实际更新过程中,逐渐偏离了初衷。慢慢的,列多了,
这些级别的栏目包括SEO教程、SEO案例研究、SEO工具、免费资源、SEO算法、SEO观点、SEO白帽技巧、在线推广、实时数据采集网络营销知识、站长访谈等。
从栏目来看,这个博客收录了很多内容,每个栏目下的内容都是一个非常专业的垂直领域。
曾经有这么多列的原因是为了搜索引擎优化。因为网站要优化,需要有关键词的排名和流量访问。因此,我们不断扩充网站的内容结构,实时数据采集尽可能丰富网站的内容。但实际上,这些结构并不重要。在以后的维护和优化过程中。
如果创建的所有列都可以专注于内容,那对 SEO 肯定是有好处的。其实在创建了一些栏目之后,还有一些栏目(比如网络营销知识)在博客创建初期,还有实时数据采集这个时候就是转载别人的心态文章. 利用网络转载别人的文章,填写自己的网站内容,丰富自己的博客。
现在想想。这真的没有意义。现在说到网站的优化效果,SEOer会为你展示网站的权重,告诉你权重的重要性。实时数据采集排名和流量是SEOER在中国的目标。这个目标也很可能是中国大部分旅游目的地的最终目标。
网站 没有流量是没有意义的。它只能用于自娱自乐。实时数据采集所以网站做SEO需要关键词排名和流入。但是,流量和流量是有区别的。精准的流量可以有效推动产品和服务的转型,而更广的流量只能体验数据变化的喜悦,这几乎是没有意义的。