此版本仍在开发中,尚未被视为稳定版本。最新的稳定版请使用 spring-cloud-task 3.1.1! |
此版本仍在开发中,尚未被视为稳定版本。最新的稳定版请使用 spring-cloud-task 3.1.1! |
如果您刚刚开始使用 Spring Cloud Task,则应阅读本节。 在这里,我们回答基本的“什么?”、“如何?”和“为什么?”的问题。我们从 对 Spring Cloud Task 的温和介绍。然后,我们构建一个 Spring Cloud Task 应用程序, 边走边讨论一些核心原则。
开发您的第一个 Spring Cloud 任务应用程序
一个好的起点是一个简单的“Hello, World!”应用程序,因此我们创建了 Spring Cloud Task 等同于突出框架的功能。大多数 IDE 都具有 对 Apache Maven 有很好的支持,所以我们用它作为这个项目的构建工具。
spring.io 网站包含许多“入门 ”
使用 Spring Boot 的指南。如果您需要解决特定问题,请先检查那里。
您可以通过转到 Spring Initializr 并创建一个新项目来快捷执行以下步骤。这样做
自动生成新的项目结构,以便您可以立即开始编码。
我们建议尝试使用 Spring Initializr 来熟悉它。 |
使用 Spring Initializr 创建 Spring 任务项目
现在,我们可以创建并测试打印到控制台的应用程序。Hello, World!
为此,请执行以下操作:
-
访问 Spring Initialzr 网站。
-
创建一个新的 Maven 项目,其组名称为 和 项目名称为 。
io.spring.demo
helloworld
-
在“依赖项”文本框中,键入并选择带有标签的依赖项。
task
Task
Spring Cloud
-
在“依赖项”文本框中,键入并选择带有标签的依赖项。
h2
H2
SQL
-
单击“生成项目”按钮
-
-
解压缩 helloworld.zip 文件并将项目导入到您喜欢的 IDE 中。
编写代码
为了完成我们的应用程序,我们需要使用以下内容更新生成的内容,以便它启动一个 Task。HelloworldApplication
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.task.configuration.EnableTask;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
@EnableTask
public class HelloworldApplication {
@Bean
public ApplicationRunner applicationRunner() {
return new HelloWorldApplicationRunner();
}
public static void main(String[] args) {
SpringApplication.run(HelloworldApplication.class, args);
}
public static class HelloWorldApplicationRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println("Hello, World!");
}
}
}
虽然它可能看起来很小,但很多事情正在发生。有关 Spring 的更多信息 启动细节,请参阅 Spring Boot 参考文档。
现在我们可以在 中打开文件。
我们需要在以下位置配置两个属性:application.properties
src/main/resources
application.properties
-
application.name
:设置应用程序名称(转换为任务名称) -
logging.level
:将Spring Cloud Task的日志记录设置为 了解正在发生的事情。DEBUG
以下示例演示如何同时执行这两项操作:
logging.level.org.springframework.cloud.task=DEBUG
spring.application.name=helloWorld
任务自动配置
当包含 Spring Cloud Task Starter 依赖项时,Task 会自动配置所有 Bean 以引导其功能。
此配置的一部分注册 和 基础结构以供其使用。TaskRepository
在我们的演示中,使用嵌入式 H2 数据库来记录结果
的任务。此 H2 嵌入式数据库不是生产环境的实用解决方案,因为
一旦任务结束,H2 DB 就会消失。但是,为了快速入门
经验,我们可以在我们的示例中使用它,并回显日志中正在更新的内容
在该存储库中。在“配置”部分(本文后面
documentation),我们介绍了如何自定义
Spring Cloud 任务。TaskRepository
当我们的示例应用程序运行时,Spring Boot 会启动我们的并输出我们的“Hello, World!”消息以达到标准。在存储库中记录任务的开始和结束。HelloWorldApplicationRunner
TaskLifecycleListener
主要方法
main 方法用作任何 java 应用程序的入口点。我们的主要方法 委托给 Spring Boot 的 SpringApplication 类。
The ApplicationRunner
Spring 包含许多引导应用程序逻辑的方法。Spring Boot 提供
一种通过其界面以有组织的方式执行此操作的便捷方法
( 或 )。一个表现良好的任务可以引导任何
逻辑,使用这两个运行器之一。*Runner
CommandLineRunner
ApplicationRunner
任务的生命周期是从执行方法之前开始考虑的
一旦它们都完成了。Spring Boot 允许应用程序使用多个实现,Spring Cloud Task 也是如此。*Runner#run
*Runner
任何从 or 以外的机制引导的处理(例如,通过使用 )都不是
由 Spring Cloud Task 录制。CommandLineRunner ApplicationRunner InitializingBean#afterPropertiesSet |
运行示例
此时,我们的应用程序应该可以正常工作。由于此应用程序是基于Spring Boot的,
我们可以从命令行运行它,方法是从根目录使用
,如以下示例所示(及其输出):$ ./mvnw spring-boot:run
$ mvn clean spring-boot:run
....... . . .
....... . . . (Maven log output here)
....... . . .
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v3.2.1)
2024-01-04T10:07:01.102-06:00 INFO 18248 --- [helloWorld] [ main] i.s.d.helloworld.HelloworldApplication : Starting HelloworldApplication using Java 21.0.1 with PID 18248 (/Users/dashaun/fun/dashaun/spring-cloud-task/helloworld/target/classes started by dashaun in /Users/dashaun/fun/dashaun/spring-cloud-task/helloworld)
2024-01-04T10:07:01.103-06:00 INFO 18248 --- [helloWorld] [ main] i.s.d.helloworld.HelloworldApplication : No active profile set, falling back to 1 default profile: "default"
2024-01-04T10:07:01.526-06:00 INFO 18248 --- [helloWorld] [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2024-01-04T10:07:01.626-06:00 INFO 18248 --- [helloWorld] [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Added connection conn0: url=jdbc:h2:mem:3ad913f8-59ce-4785-bf8e-d6335dff6856 user=SA
2024-01-04T10:07:01.627-06:00 INFO 18248 --- [helloWorld] [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2024-01-04T10:07:01.633-06:00 DEBUG 18248 --- [helloWorld] [ main] o.s.c.t.c.SimpleTaskAutoConfiguration : Using org.springframework.cloud.task.configuration.DefaultTaskConfigurer TaskConfigurer
2024-01-04T10:07:01.633-06:00 DEBUG 18248 --- [helloWorld] [ main] o.s.c.t.c.DefaultTaskConfigurer : No EntityManager was found, using DataSourceTransactionManager
2024-01-04T10:07:01.639-06:00 DEBUG 18248 --- [helloWorld] [ main] o.s.c.t.r.s.TaskRepositoryInitializer : Initializing task schema for h2 database
2024-01-04T10:07:01.772-06:00 DEBUG 18248 --- [helloWorld] [ main] o.s.c.t.r.support.SimpleTaskRepository : Creating: TaskExecution{executionId=0, parentExecutionId=null, exitCode=null, taskName='helloWorld', startTime=2024-01-04T10:07:01.757268, endTime=null, exitMessage='null', externalExecutionId='null', errorMessage='null', arguments=[]}
2024-01-04T10:07:01.785-06:00 INFO 18248 --- [helloWorld] [ main] i.s.d.helloworld.HelloworldApplication : Started HelloworldApplication in 0.853 seconds (process running for 1.029)
Hello, World!
2024-01-04T10:07:01.794-06:00 DEBUG 18248 --- [helloWorld] [ main] o.s.c.t.r.support.SimpleTaskRepository : Updating: TaskExecution with executionId=1 with the following {exitCode=0, endTime=2024-01-04T10:07:01.787112, exitMessage='null', errorMessage='null'}
2024-01-04T10:07:01.799-06:00 INFO 18248 --- [helloWorld] [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2024-01-04T10:07:01.806-06:00 INFO 18248 --- [helloWorld] [ionShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
....... . . .
....... . . . (Maven log output here)
....... . . .
前面的输出有三行,我们在这里感兴趣:
-
SimpleTaskRepository
在 .TaskRepository
-
我们的执行,由“Hello, World!”输出证明。
ApplicationRunner
-
SimpleTaskRepository
将任务的完成记录在 .TaskRepository
一个简单的任务应用程序可以在 Spring Cloud 的 samples 模块中找到 任务项目在这里。 |
spring.io 网站包含许多“入门 ”
使用 Spring Boot 的指南。如果您需要解决特定问题,请先检查那里。
您可以通过转到 Spring Initializr 并创建一个新项目来快捷执行以下步骤。这样做
自动生成新的项目结构,以便您可以立即开始编码。
我们建议尝试使用 Spring Initializr 来熟悉它。 |
任何从 or 以外的机制引导的处理(例如,通过使用 )都不是
由 Spring Cloud Task 录制。CommandLineRunner ApplicationRunner InitializingBean#afterPropertiesSet |
一个简单的任务应用程序可以在 Spring Cloud 的 samples 模块中找到 任务项目在这里。 |