文章目录
-
- Spring Cloud Task 配置DataSource
- 源代码
Spring Cloud Task 配置DataSource
Spring Cloud Task使用一个数据源来存储task执行的结果。默认情况下,提供一个内存中的H2实例来作为数据源。但是,在生产环境中,还是需要配置自己的数据源。如果只使用一个DataSource,并且该DataSourc同时用为业务数据存储和task执行结果的存储,那么所需要做的就是提供任何DataSource,比如MySQL。最简单的方法是通过Spring Boot的配置约定。
本篇博文就使用mysql来存储task的执行结果,下面来看看具体的配置和代码。
关于代码我们还是使用之前一样的代码:
package com.example;
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.cloud.task.listener.annotation.AfterTask;
import org.springframework.cloud.task.listener.annotation.BeforeTask;
import org.springframework.cloud.task.listener.annotation.FailedTask;
import org.springframework.cloud.task.repository.TaskExecution;
import org.springframework.context.annotation.Bean;
@SpringBootApplication
@EnableTask
public class HelloWorldApplication {
@Bean
public CommandLineRunner commandLineRunner() {
return new MyCommonLineRunner();
}
@BeforeTask
public void beforeTask(TaskExecution taskExecution){
System.out.println("task start.." + taskExecution.toString());
}
@AfterTask
public void afterTask(TaskExecution taskExecution){
System.out.println("task end.." + taskExecution.toString());
}
@FailedTask
public void failedTask(TaskExecution taskExecution){
System.out.println("task fail.." + taskExecution.toString());
}
public static class MyCommonLineRunner implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("Hello, World");
}
}
public static void main(String[] args) {
SpringApplication.run(HelloWorldApplication.class, args);
}
}
然后我们需要加上maven的依赖:
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.21</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
还有加上配置,然后还有docker安装好mysql,然后创建一个database,命名为testdb
# 将Spring Cloud Task的日志记录设置为DEBUG, 可以更方便的让我们调试应用
logging.level.org.springframework.cloud.task=DEBUG
# 设置application name (会转为task name)
spring.application.name=HelloWorld
# docker pull mysql
# docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.url = jdbc:mysql://192.168.99.100:3306/testdb?useUnicode=true&character_set_server=utf8mb4&useSSL=false&allowPublicKeyRetrieval=true
spring.datasource.username = root
spring.datasource.password = root
然后我们运行项目
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.4.0-SNAPSHOT)
2020-07-18 22:23:50.800 INFO 15012 --- [ main] com.example.HelloWorldApplication : Starting HelloWorldApplication using Java 1.8.0_92 on C with PID 15012 (C:\Users\c\Desktop\spring-cloud-task-demo\target\classes started by c in C:\Users\c\Desktop\spring-cloud-task-demo)
2020-07-18 22:23:50.803 INFO 15012 --- [ main] com.example.HelloWorldApplication : No active profile set, falling back to default profiles: default
2020-07-18 22:23:51.338 INFO 15012 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFERRED mode.
2020-07-18 22:23:51.357 INFO 15012 --- [ main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 8 ms. Found 0 JPA repository interfaces.
2020-07-18 22:23:51.915 INFO 15012 --- [ main] o.s.s.concurrent.ThreadPoolTaskExecutor : Initializing ExecutorService 'applicationTaskExecutor'
2020-07-18 22:23:51.926 INFO 15012 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2020-07-18 22:23:52.064 INFO 15012 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2020-07-18 22:23:52.126 INFO 15012 --- [ task-1] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [name: default]
2020-07-18 22:23:52.146 DEBUG 15012 --- [ main] o.s.c.t.c.SimpleTaskAutoConfiguration : Using org.springframework.cloud.task.configuration.DefaultTaskConfigurer TaskConfigurer
2020-07-18 22:23:52.147 DEBUG 15012 --- [ main] o.s.c.t.c.DefaultTaskConfigurer : EntityManager was found, using JpaTransactionManager
2020-07-18 22:23:52.199 INFO 15012 --- [ task-1] org.hibernate.Version : HHH000412: Hibernate ORM core version 5.4.18.Final
2020-07-18 22:23:52.417 INFO 15012 --- [ task-1] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.1.0.Final}
2020-07-18 22:23:52.496 DEBUG 15012 --- [ main] o.s.c.t.r.s.TaskRepositoryInitializer : Initializing task schema for mysql database
2020-07-18 22:23:52.654 INFO 15012 --- [ task-1] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MySQL8Dialect
2020-07-18 22:23:52.917 INFO 15012 --- [ task-1] o.h.e.t.j.p.i.JtaPlatformInitiator : HHH000490: Using JtaPlatform implementation: [org.hibernate.engine.transaction.jta.platform.internal.NoJtaPlatform]
2020-07-18 22:23:52.935 INFO 15012 --- [ task-1] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2020-07-18 22:23:53.048 DEBUG 15012 --- [ main] o.s.c.t.r.support.SimpleTaskRepository : Creating: TaskExecution{executionId=0, parentExecutionId=null, exitCode=null, taskName='HelloWorld', startTime=Sat Jul 18 22:23:52 GMT+08:00 2020, endTime=null, exitMessage='null', externalExecutionId='null', errorMessage='null', arguments=[]}
task start..TaskExecution{executionId=1, parentExecutionId=null, exitCode=null, taskName='HelloWorld', startTime=Sat Jul 18 22:23:52 GMT+08:00 2020, endTime=null, exitMessage='null', externalExecutionId='null', errorMessage='null', arguments=[]}
2020-07-18 22:23:53.073 INFO 15012 --- [ main] DeferredRepositoryInitializationListener : Triggering deferred initialization of Spring Data repositories…
2020-07-18 22:23:53.073 INFO 15012 --- [ main] DeferredRepositoryInitializationListener : Spring Data repositories initialized!
2020-07-18 22:23:53.081 INFO 15012 --- [ main] com.example.HelloWorldApplication : Started HelloWorldApplication in 2.701 seconds (JVM running for 5.796)
Hello, World
task end..TaskExecution{executionId=1, parentExecutionId=null, exitCode=0, taskName='HelloWorld', startTime=Sat Jul 18 22:23:52 GMT+08:00 2020, endTime=Sat Jul 18 22:23:53 GMT+08:00 2020, exitMessage='null', externalExecutionId='null', errorMessage='null', arguments=[]}
2020-07-18 22:23:53.098 DEBUG 15012 --- [ main] o.s.c.t.r.support.SimpleTaskRepository : Updating: TaskExecution with executionId=1 with the following {exitCode=0, endTime=Sat Jul 18 22:23:53 GMT+08:00 2020, exitMessage='null', errorMessage='null'}
2020-07-18 22:24:52.941 INFO 15012 --- [extShutdownHook] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2020-07-18 22:24:52.944 INFO 15012 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor'
2020-07-18 22:24:52.944 INFO 15012 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2020-07-18 22:24:52.950 INFO 15012 --- [extShutdownHook] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
Process finished with exit code 0
从日志输出来看,我们已经使用了MySQL作为我们的数据源了。
然后我们查看我们的tables
可以看到自动创建了下面这些表
然后我们可以查看task的执行结果记录。
源代码
https://gitee.com/cckevincyh/Spring-Cloud-Task/tree/task-datasource