在lts-admi后台 添加任务的时候 用户参数 输入
{"type":"aType"}
String type = job.getParam("type"); 会得到aType来判断执行哪个runner
========================================
pom.xml
========================================
<dependency>
<groupId>com.github.ltsopensource</groupId>
<artifactId>lts-spring</artifactId>
<version>1.7.0</version>
</dependency>
========================================
LTSSpringConfig.java
========================================
@Configuration
public class LTSSpringConfig implements ApplicationContextAware {
private ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
@Bean(name = "taskTracker")
public TaskTracker getTaskTracker() throws Exception {
TaskTrackerAnnotationFactoryBean factoryBean = new TaskTrackerAnnotationFactoryBean();
factoryBean.setApplicationContext(applicationContext);
factoryBean.setClusterName("test_cluster");
factoryBean.setJobRunnerClass(JobRunnerDispatcher.class);
factoryBean.setNodeGroup("test_trade_TaskTracker");
factoryBean.setBizLoggerLevel("INFO");
factoryBean.setRegistryAddress("zookeeper://127.0.0.1:2181");
factoryBean.setMasterChangeListeners(new MasterChangeListener[]{
new MasterNodeChangeListener()
});
factoryBean.setWorkThreads(20);
Properties configs = new Properties();
configs.setProperty("job.fail.store", "leveldb");
factoryBean.setConfigs(configs);
factoryBean.afterPropertiesSet();
factoryBean.start();
return factoryBean.getObject();
}
@Bean(name = "jobClient")
public JobClient getJobClient() throws Exception {
JobClientFactoryBean factoryBean = new JobClientFactoryBean();
factoryBean.setClusterName("test_cluster");
factoryBean.setRegistryAddress("zookeeper://127.0.0.1:2181");
factoryBean.setNodeGroup("test_jobClient1111");
factoryBean.setJobCompletedHandler(new JobCompletedHandlerImpl());
factoryBean.setMasterChangeListeners(new MasterChangeListener[]{
new MasterNodeChangeListener()
});
Properties configs = new Properties();
configs.setProperty("job.fail.store", "leveldb");
factoryBean.setConfigs(configs);
factoryBean.afterPropertiesSet();
factoryBean.start();
return factoryBean.getObject();
}
}
========================================
MasterNodeChangeListener.java
========================================
@MasterNodeListener
public class MasterNodeChangeListener implements MasterChangeListener {
private static final Logger LOGGER = LoggerFactory.getLogger(MasterNodeChangeListener.class);
/**
* @param master master节点
* @param isMaster 表示当前节点是不是master节点
*/
@Override
public void change(Node master, boolean isMaster) {
// 一个节点组master节点变化后的处理 , 譬如我多个JobClient, 但是有些事情只想只有一个节点能做。
if (isMaster) {
LOGGER.info("我变成了节点组中的master节点了, 恭喜, 我要放大招了");
} else {
LOGGER.info(StringUtils.format("master节点变成了{},不是我,我不能放大招,要猥琐", master));
}
}
}
========================================
JobRunnerDispatcher.java
========================================
/**
* 总入口,在 taskTracker.setJobRunnerClass(JobRunnerDispatcher.class)
* JobClient 提交 任务时指定 Job 类型 job.setParam("type", "aType")
*/
public class JobRunnerDispatcher implements JobRunner {
private static final ConcurrentHashMap<String, JobRunner>
JOB_RUNNER_MAP = new ConcurrentHashMap<String, JobRunner>();
static {
JOB_RUNNER_MAP.put("aType", new JobRunnerA()); // 也可以从Spring中拿
JOB_RUNNER_MAP.put("bType", new JobRunnerB());
}
@Override
public Result run(JobContext jobContext) throws Throwable {
Job job = jobContext.getJob();
String type = job.getParam("type");
return JOB_RUNNER_MAP.get(type).run(jobContext);
}
}
class JobRunnerA implements JobRunner {
@Override
public Result run(JobContext jobContext) throws Throwable {
// A类型Job的逻辑
Result result = new Result(Action.EXECUTE_SUCCESS, "执行成功");
return result;
}
}
class JobRunnerB implements JobRunner {
@Override
public Result run(JobContext jobContext) throws Throwable {
// TODO B类型Job的逻辑
return null;
}
}
========================================
JobCompletedHandlerImpl.java
========================================
public class JobCompletedHandlerImpl implements JobCompletedHandler {
@Override
public void onComplete(List<JobResult> jobResults) {
// 任务执行反馈结果处理
if (CollectionUtils.isNotEmpty(jobResults)) {
for (JobResult jobResult : jobResults) {
System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
.format(new Date()) + " 任务执行完成:" + jobResult);
}
}
}
}
分享到:
相关推荐
- **Java 11支持**:Spring 5.2.x开始支持Java 11,这是一个长期支持(LTS)版本,为开发者提供了更多现代语言特性和性能改进。 - **Spring Expression Language (SpEL)增强**:SpEL在5.2.x中进行了扩展,添加了更...
10. **兼容性和稳定性**:4.3.4是一个长期支持(LTS)版本,意味着它将获得更长时间的安全更新和支持,确保了应用的稳定性和安全性。 在实际开发中,了解并熟练运用这些知识点,将有助于构建高效、稳定的Spring应用。...
6. **与 Spring Cloud 的集成**:Sentinel 提供了对 Spring Cloud 的集成,使得在 Spring Cloud 生态系统中使用 Sentinel 成为可能,便于实现服务治理。 7. **数据源适配**:Sentinel 支持从不同的数据源动态加载...
通常,推荐使用最新的LTS(长期支持)版本。 - **Spring Boot**:Spring Boot是基于Spring Framework的一个快速开发框架,它简化了创建独立的、生产级别的基于Spring的应用程序。Spring Boot项目通常通过start....
同时,它还增加了对LTS(长期支持)Java版本的支持。 3. **Spring WebFlux增强**:此版本增强了对Reactive编程的支持,特别是Spring WebFlux模块,提供了更好的错误处理机制和反应式客户端库的支持。 4. **...
4.3.x系列是4.x线上的长期支持(LTS)版本,这意味着它会持续接收安全更新和关键错误修复。以下是一些关键知识点: 1. **依赖注入(Dependency Injection,DI)**:Spring的核心特性之一,通过DI,对象的依赖关系由...
1. **Java 17**: Java 17,也称为Java SE 17,是Oracle公司发布的长期支持(LTS)版本。它带来了增强的安全性、性能优化和新特性,例如Sealed Classes,为代码封装提供更细粒度的控制;Record类,简化数据结构的表示...
1. **Java 17兼容**:作为JDK 17的LTS版本,Spring Boot 3.x 将确保与之完美兼容,提供最佳的开发体验。 2. **Spring Framework 6.x**:Spring Boot 3.x 很可能基于Spring Framework的最新版本,带来性能优化和新...
**Java 17**: Java 17(代号为"Temurin")是Java平台的标准版(JDK)的最新长期支持(LTS)版本。它带来了许多增强和性能优化,包括更强的类型推断、密封类、记录类、开关表达式等新特性。安全性、垃圾收集和内存...
JDK 17,作为Java的长期支持(LTS)版本,带来了许多性能增强和新的语言特性。例如,Switch表达式在JDK 17中已经完全成熟,提供了更简洁的代码结构;文本块(Text Blocks)允许更直观地处理多行字符串,减少了转义...
- JDK11是Oracle在2018年9月发布的长期支持(LTS)版本,提供了许多新特性,包括模块化系统(Project Jigsaw)、局部变量类型推断(var关键字)、HTTP客户端API、改进的字符串处理等。 - 使用JDK11可以确保项目...
Spring4.3.7是一个长期支持(LTS)版本,具有良好的稳定性和兼容性,它引入了新的注解,如`@Nullable`和`@NonNull`,增强了对Java 8的支持,以及对WebFlux非阻塞处理的支持。 **MyBatis与Spring的整合** 主要体现在...
- Java版本:推荐使用最新的Java LTS版本。 - **安装Spring Boot**: - **Maven安装**: 在`pom.xml`中添加Spring Boot的依赖。 - **Gradle安装**: 在`build.gradle`文件中添加依赖。 - **Spring Boot CLI**: 提供...
例如,`lts-example-jobclient-spring-annotation.rar`这个文件很可能是LTS的一个示例项目,它演示了如何使用Spring注解来配置和启动任务客户端。Spring注解简化了任务的声明和依赖注入,使得开发人员可以快速地将...
在Python方面,我们使用的是3.6.3版本,这是一个较新的长期支持(LTS)版本,拥有良好的性能和兼容性。Python的Web服务通常可以由Flask或Django等框架提供,这些框架能够快速构建RESTful API,并且易于与其他语言...
Java 11是长期支持(LTS)版本,提供了许多新特性,比如局部变量类型推断(var关键字)、HTTP客户端API等。 6. **项目结构**:一个标准的Spring Boot项目通常包含`src/main/java`下的源代码目录,`src/main/...
1. **框架选择**:开源项目通常基于流行的开发框架构建,如Spring Boot、Django或Node.js等。这些框架提供了快速开发和可扩展性的基础,同时具有丰富的生态系统和社区支持。 2. **数据库管理**:采购过程涉及大量的...
项目信息 SkyFire是主要基于C ++的MMORPG框架。 SkyFireEMU是主要基于C ++的MMORPG框架。 它是完全开源的,并得到... Ubuntu 18.04 LTS:x86_32,x86_64 Ubuntu 20.04 LTS:x86_32,x86_64 Debian: Debian GNU / L
- `spring-boot-cli-1.5.9.RELEASE`版本意味着这是Spring Boot 1.5.x系列的一个稳定发布,1.5.x系列是一个长期支持(LTS)版本。 - Spring Boot遵循严格的版本策略,1.x版本主要关注Java 8,而2.x版本则支持Java ...