今天给各位分享在线任务网站源码分享的知识,其中也会对在线做任务赚钱的软件有哪些进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
??定时任务几乎是每个业务系统必不可少的功能,计算到期时间、过期时间等,定时触发某项任务操作。在使用单体应用时,基本使用Spring提供的注解即可实现定时任务,而在使用微服务集群时,这种方式就要考虑添加分布式锁来防止多个微服务同时运行定时任务而导致同一个任务重复执行。??除了使用注解,现在还有一种方式,就是搭建分布式任务平台,所有的微服务注册到分布式任务平台,由分布式任务平台统一调度,这样避免了同一任务被重复执行。这里我们选择使用XXL-JOB作为分布式任务调度平台,XXL-JOB核心设计目标是开发迅速、学习简单、轻量级、易扩展。??使用分布式任务调度平台的优点除了避免同一任务重复执行外,还有使用简单,可以手动执行、有详细的调度日志查看任务具体执行情况等优点。??XXL-JOB官方架构设计图:
??下面我们按照步骤来介绍,如何结合我们的微服务平台将分布式任务调度平台XXL-JOB集成进来,实现我们需要的定时任务功能。
一、微服务框架整合xxl-job-admin
1、XXL-JOB开源网站下载源码,下载地址https://github.com/xuxueli/xxl-job/releases,下载下来的源码如下:
xxl-job-admin:调度中心\nxxl-job-core:公共依赖\nxxl-job-executor-samples:执行器Sample示例(选择合适的版本执行器,可直接使用,也可以参考其并将现有项目改造成执行器)\n:xxl-job-executor-sample-springboot:Springboot版本,通过Springboot管理执行器,推荐这种方式;\n:xxl-job-executor-sample-frameless:无框架版本;\n
??下载下来的开源包有三个目录:xxl-job-admin、xxl-job-core和xxl-job-executor-samples,顾名思义,xxl-job-admin是分布式任务平台的服务端兼管理台,我们需要部署的也是这个工程,我们可以把整个工程集成到我们的微服务中,统一打包部署;xxl-job-core是公共依赖包,我们其他需要实现定时任务的微服务需要引入这个包来实现定时任务执行器。xxl-job-executor-samples为定时任务执行器的实例代码。
2、在基础平台gitegg-platform工程gitegg-platform-bom中引入xxl-job-core核心包,统一版本管理。
……\n<!–分布式任务调度平台XXL-JOB核心包–>\n<xxl-job.version>2.3.1</xxl-job.version>\n……\n<!–分布式任务调度平台XXL-JOB核心包–>\n<dependency>\n<groupId>com.xuxueli</groupId>\n<artifactId>xxl-job-core</artifactId>\n<version>${xxl-job.version}</version>\n</dependency>\n
3、将xxl-job-admin集成到微服务工程中,方便统一打包部署
??根据我们的微服务架构设计,gitegg-plugin作为我们系统的插件工程,里面放置我们需要的插件服务。有些插件是必须的,而有些插件可能会用不到,此时我们就可以根据自己的业务需求去选择部署业务插件。??为和我们的微服务深度集成就不是解耦的特性,我们需要对xxl-job-admin的配置文件进行适当的修改:
首先修改pom.xml,保持各依赖库版本一致,修改parent标签,使其引用GitEgg工程的基础jar包和微服务配置注册功能,同时排除logback,使用log4j2记录日志
<projectxmlns=&34;xmlns:xsi=&34;\nxsi:schemaLocation=&34;>\n<parent>\n<artifactId>gitegg-plugin</artifactId>\n<groupId>com.gitegg.cloud</groupId>\n<version>1.0.1.RELEASE</version>\n</parent>\n<modelVersion>4.0.0</modelVersion>\n\n<artifactId>gitegg-job</artifactId>\n<name>${project.artifactId}</name>\n<packaging>jar</packaging>\n\n<properties>\n<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>\n<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>\n<maven.compiler.encoding>UTF-8</maven.compiler.encoding>\n<maven.compiler.source>1.8</maven.compiler.source>\n<maven.compiler.target>1.8</maven.compiler.target>\n<maven.test.skip>true</maven.test.skip>\n\n<netty-all.version>4.1.63.Final</netty-all.version>\n<gson.version>2.9.0</gson.version>\n\n<spring.version>5.3.20</spring.version>\n<spring-boot.version>2.6.7</spring-boot.version>\n\n<mybatis-spring-boot-starter.version>2.2.2</mybatis-spring-boot-starter.version>\n<mysql-connector-java.version>8.0.29</mysql-connector-java.version>\n\n<slf4j-api.version>1.7.36</slf4j-api.version>\n<junit-jupiter.version>5.8.2</junit-jupiter.version>\n<javax.annotation-api.version>1.3.2</javax.annotation-api.version>\n\n<groovy.version>3.0.10</groovy.version>\n\n<maven-source-plugin.version>3.2.1</maven-source-plugin.version>\n<maven-javadoc-plugin.version>3.4.0</maven-javadoc-plugin.version>\n<maven-gpg-plugin.version>3.0.1</maven-gpg-plugin.version>\n</properties>\n\n<dependencies>\n<!–giteggSpringBoot自定义及扩展–>\n<dependency>\n<groupId>com.gitegg.platform</groupId>\n<artifactId>gitegg-platform-boot</artifactId>\n</dependency>\n<!–giteggSpringCloud自定义及扩展–>\n<dependency>\n<groupId>com.gitegg.platform</groupId>\n<artifactId>gitegg-platform-cloud</artifactId>\n</dependency>\n<dependency>\n<groupId>org.mybatis.spring.boot</groupId>\n<artifactId>mybatis-spring-boot-starter</artifactId>\n<version>${mybatis-spring-boot-starter.version}</version>\n<!–去除springboot默认的logback配置–>\n<exclusions>\n<exclusion>\n<groupId>org.springframework.boot</groupId>\n<artifactId>spring-boot-starter</artifactId>\n</exclusion>\n</exclusions>\n</dependency>\n<dependency>\n<groupId>org.springframework.boot</groupId>\n<artifactId>spring-boot-starter-test</artifactId>\n<scope>test</scope>\n<!–去除springboot默认的logback配置–>\n<exclusions>\n<exclusion>\n<groupId>org.springframework.boot</groupId>\n<artifactId>spring-boot-starter</artifactId>\n</exclusion>\n</exclusions>\n</dependency>\n<!–freemarker-starter–>\n<dependency>\n<groupId>org.springframework.boot</groupId>\n<artifactId>spring-boot-starter-freemarker</artifactId>\n<!–去除springboot默认的logback配置–>\n<exclusions>\n<exclusion>\n<groupId>org.springframework.boot</groupId>\n<artifactId>spring-boot-starter</artifactId>\n</exclusion>\n</exclusions>\n</dependency>\n<!–mail-starter–>\n<dependency>\n<groupId>org.springframework.boot</groupId>\n<artifactId>spring-boot-starter-mail</artifactId>\n<!–去除springboot默认的logback配置–>\n<exclusions>\n<exclusion>\n<groupId>org.springframework.boot</groupId>\n<artifactId>spring-boot-starter</artifactId>\n</exclusion>\n</exclusions>\n</dependency>\n<!–starter-actuator–>\n<dependency>\n<groupId>org.springframework.boot</groupId>\n<artifactId>spring-boot-starter-actuator</artifactId>\n<!–去除springboot默认的logback配置–>\n<exclusions>\n<exclusion>\n<groupId>org.springframework.boot</groupId>\n<artifactId>spring-boot-starter</artifactId>\n</exclusion>\n</exclusions>\n</dependency>\n<!–mysql–>\n<dependency>\n<groupId>mysql</groupId>\n<artifactId>mysql-connector-java</artifactId>\n<version>${mysql-connector-java.version}</version>\n</dependency>\n<!–分布式任务调度平台XXL-JOB核心包–>\n<dependency>\n<groupId>com.xuxueli</groupId>\n<artifactId>xxl-job-core</artifactId>\n<!–去除冲突的slf4j配置–>\n<exclusions>\n<exclusion>\n<groupId>org.slf4j</groupId>\n<artifactId>slf4j-api</artifactId>\n</exclusion>\n</exclusions>\n</dependency>\n\n</dependencies>\n\n<build>\n<plugins>\n<plugin>\n<groupId>com.google.cloud.tools</groupId>\n<artifactId>jib-maven-plugin</artifactId>\n</plugin>\n</plugins>\n</build>\n\n</project>\n\n
修改application.properties,根据我们系统的规范,新增bootstrap.yml、bootstrap-dev.yml、bootstrap-prod.yml、bootstrap-test.yml文件。将application.properties部分配置,移到bootstrap.yml配置中。因xxl-job-admin单独数据库,且其默认使用的是Hikari数据库连接池,这里我们不打算改动,仍然使其保持原有的数据库配置,我们将可配置的内容放置在Nacos微服务配置中心上,同时在bootstrap.yml中添加多yaml文件配置(请注意,在我们本地使用的是yml结尾的文件,Nacos服务注册中心上使用的是yaml结尾的文件,两者是一样的,只是扩展名的不同)。
bootstrap.yml配置:
server:\nport:8007\nspring:\nprofiles:\nactive:&39;\napplication:\nname:&39;\ncloud:\ninetutils:\nignored-interfaces:docker0\nnacos:\ndiscovery:\nserver-addr:${spring.nacos.addr}\nconfig:\nserver-addr:${spring.nacos.addr}\nfile-extension:yaml\nextension-configs:\nxxl-job-adminconfig\nmvc:\nservlet:\nload-on-startup:0\nstatic-path-pattern:/static/**\nresources:\nstatic-locations:classpath:/static/\nactuator\nmanagement:\nserver:\nservlet:\ncontext-path:/actuator\nhealth:\nmail:\nenabled:false\ndatasource-pool\ntype:com.zaxxer.hikari.HikariDataSource\nhikari:\nminimum-idle:10\nmaximum-pool-size:30\nauto-commit:true\nidle-timeout:30000\npool-name:HikariCP\nmax-lifetime:900000\nconnection-timeout:10000\nconnection-test-query:SELECT1\nvalidation-timeout:1000\nxxl-job,accesstoken\nxxl:\njob:\naccessToken:default_token\n34;zh_CN&34;zh_TC&34;en&xxl-job,logretentiondays\nlogretentiondays:30\n
4、初始化xxl-job-admin需要的数据库脚本
??初始化脚本存放在下载的包目录的\\xxl-job-2.3.1\\doc\\db\\tables_xxl_job.sql中,一共需要8张表。我们将xxl-job-admin的数据库和业务数据库分开,配置不同的数据源,在Nacos配置单独的xxl-job-admin配置文件。
新建xxl_job数据库打开数据库执行建表语句
5、在GitEgg工程的父级pom.xml下添加静态文件过滤
??xxl-job-admin是SpringMVC项目,其前端页面由ftl文件和静态文件组成,默认情况下maven启用分环境读取配置时,会对resource目录下的@进行替换,导致静态文件下的字体文件不能用,所以,这里需要进行和jks文件一样的过滤配置:
<resources>\n<!–增加分环境读取配置–>\n<resource>\n<directory>src/main/resources</directory>\n<filtering>true</filtering>\n<excludes>\n<exclude>**/*.jks</exclude>\n<exclude>static/**</exclude>\n</excludes>\n</resource>\n<!–解决jks被过滤掉的问题–>\n<resource>\n<directory>src/main/resources</directory>\n<filtering>false</filtering>\n<includes>\n<include>**/*.jks</include>\n<include>static/**</include>\n</includes>\n</resource>\n<resource>\n<directory>src/main/java</directory>\n<includes>\n<include>**/*.xml</include>\n</includes>\n</resource>\n</resources>\n
6、在Gateway添加xxl-job-admin路由转发
??xxl-job-admin路由转发需要添加两方面内容,一个是xxl-job-admin注册到Nacos注册中心上的gitegg-job服务,一个是xxl-job-admin前端页面请求的静态文件转发。第一个是为了和我们整体微服务保持一致,第二个是为了解决xxl-job-admin前端ftl页面在请求静态文件时,请求的是/xxl-job-admin根路径。新增Gateway路由转发配置如下:
-id:gitegg-job\nuri:lb://gitegg-job\npredicates:\n-Path=/gitegg-job/**\nfilters:\n-StripPrefix=1\n-id:xxl-job-admin\nuri:lb://gitegg-job\npredicates:\n-Path=/xxl-job-admin/**\nfilters:\n-StripPrefix=0\n
7、增加xxl-job-admin访问白名单
??xxl-job-admin有自己的权限访问控制,我们不在网关对其进行鉴权,所以在Nacos配置中,增加白名单配置:
34;/gitegg-job/**&34;/xxl-job-admin/**&34;${xxl.job.admin.addresses}&34;${xxl.job.accessToken}&34;${xxl.job.executor.appname}&34;${xxl.job.executor.address}&34;${xxl.job.executor.ip}&34;${xxl.job.executor.port}&34;${xxl.job.executor.logpath}&34;${xxl.job.executor.logretentiondays}&34;>>>>>>>>>>>xxl-jobconfiginit.&34;spring-cloud-commons&34;InetUtils&39;xxx.xxx.xxx.&39;default_token&34;systemJobHandler&34;不带返回值:XXL-JOB,HelloWorld.&34;beatat:&34;userJobHandler&34;带返回值:XXL-JOB,HelloWorld.&34;beatat:”+i);\nTimeUnit.SECONDS.sleep(2);\n}\nreturnReturnT.SUCCESS;\n}\n\n}\n\n
3、配置xxl-job-admin新增执行器
新增时:gitegg-service-system服务启动后,自动注册:
4、新增xxl-job-admin任务
??执行器可以看做是一组微服务,而任务是微服务具体执行的方法。任务新增后,默认是STOP状态,需要手动启动,当列表显示RUNNING时,表示该任务是运行状态,会根据配置的时间执行。
5、查看执行器是否执行
??在本地开发环境查看任务执行的方式有多种,直接Debug也可以,生产环境我们可以查看xxl-job日志,在测试代码中记录的log,在xxl-job-admin管理台都可以详细查看。
??通过以上操作步骤,我们将xxl-job和xxl-job-admin整合到了我们的微服务架构中,只需要在有任务调度需求的微服务中实现执行器就可以满足我们的需求了。
源码地址:
GitEgg:GitEgg是一款开源免费的企业级微服务应用开发框架,旨在整合目前主流稳定的开源技术框架,集成常用的最佳项目解决方案,实现可直接使用的微服务快速开发框架。
GitHub-wmz1930/GitEgg:GitEgg是一款开源免费的企业级微服务应用开发框架,旨在整合目前主流稳定的开源技术框架,集成常用的最佳项目解决方案,实现可直接使用的微服务快速开发框架。
文章分享结束,在线任务网站源码分享和在线做任务赚钱的软件有哪些的答案你都知道了吗?欢迎再次光临本站哦!
