您现在的位置是:亿华云 > 数据库

Spring Cloud Task 一个允许短期运行的微服务组件

亿华云2025-10-03 06:17:33【数据库】0人已围观

简介简介Spring Cloud Task允许用户使用Spring Cloud开发和运行短期的微服务,并在本地、云中甚至在Spring Cloud数据流上运行它们。只需添加@Enab

简介

Spring Cloud Task允许用户使用Spring Cloud开发和运行短期的允许运行微服务,并在本地、短期的微云中甚至在Spring Cloud数据流上运行它们。服务只需添加@EnableTask并将应用程序作为Spring Boot应用程序运行(单个应用程序上下文)。组件

Spring Cloud Task使创建短期微服务变得容易。允许运行它提供了在生产环境中按需执行短期JVM进程的短期的微功能。

环境要求

你需要安装Java(Java 8或更高的服务版本)。要进行构建,组件还需要安装Maven。允许运行

数据库要求

Spring Cloud Task使用关系数据库存储已执行任务的短期的微结果。虽然你可以在没有数据库的服务情况下开始开发任务(任务的状态记录为任务存储库更新的一部分),但对于生产环境,组件你希望使用受支持的允许运行数据库。Spring Cloud Task 目前支持以下数据库:

DB2H2HSQLDBMySqlOraclePostgresSqlServer依赖管理

org.springframework.boot

spring-boot-starter-data-jpa

org.springframework.cloud

spring-cloud-starter-task

mysql

mysql-connector-java

配置文件server:

port: 8082

---

spring:

datasource:

driverClassName: com.mysql.cj.jdbc.Driver

url: jdbc:mysql://localhost:3306/tasks?短期的微serverTimezone=GMT%2B8&nullCatalogMeansCurrent=true

username: root

password: root

type: com.zaxxer.hikari.HikariDataSource

hikari:

minimumIdle: 10

maximumPoolSize: 200

autoCommit: true

idleTimeout: 30000

poolName: MasterDatabookHikariCP

maxLifetime: 1800000

connectionTimeout: 30000

connectionTestQuery: SELECT 1

---

spring:

h2:

console:

enabled: true

settings:

web-allow-others: true

path: /h2

---

spring:

application:

name: taskDemo

---

logging:

level:

org.springframework.cloud.task: DEBUG简单任务@SpringBootApplication

@EnableTask

public class SpringCloudTaskDemoApplication {

@Bean

public CommandLineRunner helloRunner() {

return new CommandLineRunner() {

@Override

public void run(String... args) throws Exception {

System.out.println("开始执行任务") ;

TimeUnit.SECONDS.sleep(1) ;

System.out.println("任务执行完成") ;

}

};

}

public static void main(String[] args) {

SpringApplication.run(SpringCloudTaskDemoApplication.class, args);

}

}

注意这里需要@EnableTask开启功能,然后自定义了一个CommandLineRunner类型的云服务器提供商服务Bean。我们的任务都应该在CommandLineRunner或者ApplicationRunner中执行。

执行

run方法执行完以后我们的JVM进程也跟着结束了。这就是所谓的短期任务了,我们不需要任务一直执行,只需要在需要的时候执行即可。

任务执行完以后会在数据表中记录相关的执行结果信息。

这些表记录了本次任务执行的相关信息,成功,失败等。

事件监听

我们任务的执行在每一个节点上都可以进行相关的监听处理

@Component

public class TaskListenerConfig {

@BeforeTask

public void before(TaskExecution taskExecution) {

System.out.println("任务执行前") ;

}

@AfterTask

public void after(TaskExecution taskExecution) {

System.out.println("任务执行后") ;

}

@FailedTask

public void fail(TaskExecution taskExecution, Throwable throwable) {

System.out.println("任务执行失败," + throwable.getMessage()) ;

}

}

以上是通过注解的方式实现,我们也可以通过实现TaskExecutionListener接口的方式实现。

@Component

public class DemoListener implements TaskExecutionListener {

@Override

public void onTaskStartup(TaskExecution taskExecution) {

}

@Override

public void onTaskEnd(TaskExecution taskExecution) {

}

@Override

public void onTaskFailed(TaskExecution taskExecution, Throwable throwable) {

}

}任务监听发生异常

如果TaskExecutionListener事件处理程序引发异常,云南idc服务商则该事件处理程序的所有侦听器处理都将停止。例如,如果已启动三个onTaskStartup侦听器,并且第一个onTaskStartup事件处理程序引发异常,则不会调用其他两个onTaskStartup方法。但是,会调用TaskExecutionListeners的其他事件处理程序(onTaskEnd和onTaskFailed)。因为执行这些回调方法都是在不同的阶段执行的,所以只会影响那个阶段的事件并不会影响其它阶段事件。

限制任务执行

如果你要控制每个任务只允许同时允许一个,那么我们可以通过如下方式控制:

添加依赖:

org.springframework.integration

spring-integration-core

org.springframework.integration

spring-integration-jdbc

</dependency>

上面2个依赖是必须的,这是限制任务执行所需要的。

添加配置:

spring:

cloud:

task:

singleInstanceEnabled: true

开启单任务执行。

完毕!!

很赞哦!(4)