Browse Source

定时任务模块之 SpringTask 案例完成

3.x
Yangkai.Shen 2 years ago
parent
commit
4d0391f034
10 changed files with 93 additions and 177 deletions
  1. +0
    -25
      demo-task/demo-task-spring/.gitignore
  2. +55
    -106
      demo-task/demo-task-spring/README.md
  3. +11
    -18
      demo-task/demo-task-spring/pom.xml
  4. +2
    -2
      demo-task/demo-task-spring/src/main/java/com/xkcoding/task/SpringTaskApplication.java
  5. +5
    -7
      demo-task/demo-task-spring/src/main/java/com/xkcoding/task/configuration/TaskAutoConfiguration.java
  6. +2
    -2
      demo-task/demo-task-spring/src/main/java/com/xkcoding/task/job/MockSpringTask.java
  7. +1
    -1
      demo-task/demo-task-spring/src/main/resources/application.yml
  8. +0
    -16
      demo-task/demo-task-spring/src/test/java/com/xkcoding/task/SpringBootDemoTaskApplicationTests.java
  9. +13
    -0
      demo-task/demo-task-spring/src/test/java/com/xkcoding/task/SpringTaskApplicationTests.java
  10. +4
    -0
      demo-task/pom.xml

+ 0
- 25
demo-task/demo-task-spring/.gitignore View File

@@ -1,25 +0,0 @@
/target/
!.mvn/wrapper/maven-wrapper.jar

### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache

### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr

### NetBeans ###
/nbproject/private/
/build/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/

+ 55
- 106
demo-task/demo-task-spring/README.md View File

@@ -1,77 +1,38 @@
# spring-boot-demo-task

> 此 demo 主要演示了 Spring Boot 如何快速实现定时任务。
> 此 demo 主要演示了 Spring Boot 如何通过 Spring Task 快速实现定时任务。

## pom.xml
## 1.开发步骤

### 1.1.添加依赖

```xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<artifactId>spring-boot-demo-task</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>jar</packaging>

<name>spring-boot-demo-task</name>
<description>Demo project for Spring Boot</description>

<parent>
<groupId>com.xkcoding</groupId>
<artifactId>spring-boot-demo</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>

<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<finalName>spring-boot-demo-task</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>
<dependencies>
<dependency>
<groupId>com.xkcoding</groupId>
<artifactId>common-tools</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
```

## TaskConfig.java
### 1.2.SpringTask的自动装配

> 此处等同于在配置文件配置
>
@@ -81,18 +42,9 @@
> ```

```java
/**
* <p>
* 定时任务配置,配置线程池,使用不同线程执行任务,提升效率
* </p>
*
* @author yangkai.shen
* @date Created in 2018-11-22 19:02
*/
@Configuration
@EnableScheduling
@ComponentScan(basePackages = {"com.xkcoding.task.job"})
public class TaskConfig implements SchedulingConfigurer {
@Configuration
public class TaskAutoConfiguration implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setScheduler(taskExecutor());
@@ -106,25 +58,33 @@ public class TaskConfig implements SchedulingConfigurer {
*/
@Bean
public Executor taskExecutor() {
return new ScheduledThreadPoolExecutor(20, new BasicThreadFactory.Builder().namingPattern("Job-Thread-%d").build());
return new ScheduledThreadPoolExecutor(20, new NamedThreadFactory("Job-Thread-", false));
}
}
```

## TaskJob.java
### 1.3.配置文件

```yaml
server:
port: 8080
servlet:
context-path: /demo
# 下面的配置等同于 TaskConfig
#spring:
# task:
# scheduling:
# pool:
# size: 20
# thread-name-prefix: Job-Thread-
```

### 1.4.创建定时任务

```java
/**
* <p>
* 定时任务
* </p>
*
* @author yangkai.shen
* @date Created in 2018-11-22 19:09
*/
@Component
@Slf4j
public class TaskJob {
@Component
public class MockSpringTask {

/**
* 按照标准时间来算,每隔 10s 执行一次
@@ -154,22 +114,11 @@ public class TaskJob {
}
```

## application.yml
## 2.测试

```yaml
server:
port: 8080
servlet:
context-path: /demo
# 下面的配置等同于 TaskConfig
#spring:
# task:
# scheduling:
# pool:
# size: 20
# thread-name-prefix: Job-Thread-
```
启动 `SpringTaskApplication` 观察控制台日志

## 3.参考

## 参考
- [Spring Boot 官方文档之定时任务](https://docs.spring.io/spring-boot/docs/3.0.0-M4/reference/htmlsingle/#features.task-execution-and-scheduling)

- Spring Boot官方文档:https://docs.spring.io/spring-boot/docs/2.1.0.RELEASE/reference/htmlsingle/#boot-features-task-execution-scheduling

+ 11
- 18
demo-task/demo-task-spring/pom.xml View File

@@ -1,6 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>com.xkcoding</groupId>
<artifactId>demo-task</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>

<modelVersion>4.0.0</modelVersion>

<artifactId>demo-task-spring</artifactId>
@@ -10,27 +16,19 @@
<name>demo-task-spring</name>
<description>Demo project for Spring Boot</description>

<parent>
<groupId>com.xkcoding</groupId>
<artifactId>spring-boot-demo</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<java.version>17</java.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<groupId>com.xkcoding</groupId>
<artifactId>common-tools</artifactId>
</dependency>

<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
@@ -40,11 +38,6 @@
</dependency>

<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>


demo-task/demo-task-spring/src/main/java/com/xkcoding/task/SpringBootDemoTaskApplication.java → demo-task/demo-task-spring/src/main/java/com/xkcoding/task/SpringTaskApplication.java View File

@@ -12,9 +12,9 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
* @date Created in 2018-11-22 19:00
*/
@SpringBootApplication
public class SpringBootDemoTaskApplication {
public class SpringTaskApplication {

public static void main(String[] args) {
SpringApplication.run(SpringBootDemoTaskApplication.class, args);
SpringApplication.run(SpringTaskApplication.class, args);
}
}

demo-task/demo-task-spring/src/main/java/com/xkcoding/task/config/TaskConfig.java → demo-task/demo-task-spring/src/main/java/com/xkcoding/task/configuration/TaskAutoConfiguration.java View File

@@ -1,8 +1,7 @@
package com.xkcoding.task.config;
package com.xkcoding.task.configuration;

import org.apache.commons.lang3.concurrent.BasicThreadFactory;
import cn.hutool.core.thread.NamedThreadFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
@@ -19,10 +18,9 @@ import java.util.concurrent.ScheduledThreadPoolExecutor;
* @author yangkai.shen
* @date Created in 2018-11-22 19:02
*/
@Configuration
@EnableScheduling
@ComponentScan(basePackages = {"com.xkcoding.task.job"})
public class TaskConfig implements SchedulingConfigurer {
@Configuration
public class TaskAutoConfiguration implements SchedulingConfigurer {
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setScheduler(taskExecutor());
@@ -36,6 +34,6 @@ public class TaskConfig implements SchedulingConfigurer {
*/
@Bean
public Executor taskExecutor() {
return new ScheduledThreadPoolExecutor(20, new BasicThreadFactory.Builder().namingPattern("Job-Thread-%d").build());
return new ScheduledThreadPoolExecutor(20, new NamedThreadFactory("Job-Thread-", false));
}
}

demo-task/demo-task-spring/src/main/java/com/xkcoding/task/job/TaskJob.java → demo-task/demo-task-spring/src/main/java/com/xkcoding/task/job/MockSpringTask.java View File

@@ -15,9 +15,9 @@ import java.util.Date;
* @author yangkai.shen
* @date Created in 2018-11-22 19:09
*/
@Component
@Slf4j
public class TaskJob {
@Component
public class MockSpringTask {

/**
* 按照标准时间来算,每隔 10s 执行一次

+ 1
- 1
demo-task/demo-task-spring/src/main/resources/application.yml View File

@@ -8,4 +8,4 @@ server:
# scheduling:
# pool:
# size: 20
# thread-name-prefix: Job-Thread-
# thread-name-prefix: Job-Thread-

+ 0
- 16
demo-task/demo-task-spring/src/test/java/com/xkcoding/task/SpringBootDemoTaskApplicationTests.java View File

@@ -1,16 +0,0 @@
package com.xkcoding.task;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;

@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringBootDemoTaskApplicationTests {

@Test
public void contextLoads() {
}

}

+ 13
- 0
demo-task/demo-task-spring/src/test/java/com/xkcoding/task/SpringTaskApplicationTests.java View File

@@ -0,0 +1,13 @@
package com.xkcoding.task;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class SpringTaskApplicationTests {

@Test
public void contextLoads() {
}

}

+ 4
- 0
demo-task/pom.xml View File

@@ -18,4 +18,8 @@
<java.version>17</java.version>
</properties>

<modules>
<module>demo-task-spring</module>
</modules>

</project>

Loading…
Cancel
Save