предисловие
Временные задачи могут помочь нам справиться с задачами в течение заданного времени, например, ваш будильник научит вас вставать каждое утро, например, чтение таблицы вашего ребенка в таблице компании, если вы уйдете, вы будете через месяц после того, как библиотека автоматически удалил (шутка), подождите, далее вводится создание трех тайминговых задач (на самом деле двух, третья не считается).
три пути
Использовать SpringBoot для создания задач на время очень просто, в настоящее время существует три основных способа их создания:
- На основе аннотаций (@Scheduled)
- На основе интерфейса (SchedulingConfigurer) Первый считается знакомым всем, но в реальном использовании мы часто хотим прочитать указанное время из базы данных для динамического выполнения запланированных задач. .
- Настройка многопоточных задач синхронизации на основе аннотаций
На основе аннотации @Scheduled
@Configuration отмечает класс в качестве класса конфигурации для автоматической инъекции. @Enablescheduling позволяет запланированные задачи.
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
/**
* @author: zp
* @Date: 2019-09-28 17:08
* @Description:
*/
@Configuration
@EnableScheduling
public class TaskBasedAnnotation {
// 每两秒执行一次
@Scheduled(cron = "*/2 * * * * ?")
public void sayHello(){
System.out.println("Hello, menmen!"+Thread.currentThread().getName());
}
}
На основе интерфейса SchedulingConfigurer
import com.example.demojpa.dao.CronRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
/**
* @author: zp
* @Date: 2019-09-28 17:33
* @Description:
*/
@Configuration
@EnableScheduling
public class TaskBasedInterface implements SchedulingConfigurer {
/**
* 这是JPA,Mapper可以注入Mapper文件
* 都是为了从数据库读取配置 *3 * * * * ?
*/
@Autowired
CronRepository cronRepository;
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.addCronTask(()-> System.out.println("你好,门门!"+Thread.currentThread().getName()),cronRepository.getCron());
}
}
Асинхронная задача по времени
@EnableAsync включает многопоточность. @Async помечает это как асинхронную задачу.
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
/**
* @author: zp
* @Date: 2019-09-28 17:50
* @Description:
*/
@Configuration
@EnableScheduling
@EnableAsync
public class AsyncTask {
@Async
@Scheduled(cron = "*/4 * * * * ?")
public void message(){
System.out.println("menmen ni hao !");
}
}
Вы можете видеть, что каждая нить отличается. Может использоваться для выполнения трудоемких задач.
постскриптум
Основная цель обучения это должно хранить тысячи самодовольных слов в базе данных, а затем отправить мне случайное каждое утро в сочетании с определенной SMS-платформой. Если это так, я определенно умру от радости каждый день ~
Следуйте за мной, и вы не будете разочарованы ~