Как SpringBoot реализует асинхронные и синхронизированные задачи?

Spring Boot

Поставьте лайк и посмотрите еще раз, сформируйте привычку, я слышал, что поисковый аккаунт WeChat "Java Fish Aberdeen" выведет ваши технологии на более высокий уровень.

(1) Асинхронные задачи

Требования к асинхронным задачам часто встречаются в реальных сценариях разработки.Существует много способов добиться асинхронности в Java, например многопоточность для достижения асинхронности. В SpringBoot для реализации асинхронных задач требуется добавить только две аннотации. Добавьте аннотацию @Async к текущему классу, добавьте @EnableAsync к классу запуска

Напишите службу AsynService и дайте ей приостановиться на 3 секунды перед выводом данных.

@Service
public class AsynService {
    @Async
    public void async(){
        try {
            Thread.sleep(3000);
            System.out.println("执行结束");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

Напишите контроллер и вызовите этот класс обслуживания

@RestController
public class IndexController {
    @Autowired
    public AsynService asynService;
    @RequestMapping("/index")
    public String  asynctask(){
        asynService.async();
        return "async task";
    }
}

Доступ в браузере после запускаhttp://localhost:8080/index, вы обнаружите, что, поскольку асинхронность включена, браузер сначала выводит асинхронную задачу, а консоль выводит завершение выполнения через три секунды.

(2) Запланированные задачи

Я использовал временные задачи в предыдущем проекте с открытым исходным кодом seckill.В сценарии того времени база данных опрашивалась каждую минуту для запроса продуктов с истекшим сроком действия. Спектр задач, выполняемых на время, очень широк, например, автоматическая упаковка журналов в 12 часов каждый день, резервное копирование в 12 часов каждую ночь и так далее. Реализация задач по времени в SpringBoot также требует всего две аннотации: @Scheduled и @EnableScheduling. Как и прежде, @Scheduled используется для задач, которые необходимо выполнять регулярно, а @EnableScheduling — для классов запуска. Сначала напишите класс запланированной задачи:

@Service
public class ScheduleService {

    @Scheduled(cron = "0/10 * * * * ? ")
    public void sayHello(){
        System.out.println("hello");
    }
}

В аннотацию @Scheduled необходимо добавить выражение cron, чтобы определить время выполнения запланированной задачи, что означает, что она выполняется каждые 10 секунд.

Затем добавьте аннотацию @EnableScheduling в класс запуска. Запустите проект, и вы обнаружите, что приветствие будет выводиться каждые десять секунд.