Como SpringBoot implementa tarefas assíncronas e cronometradas?

Escrito na frente: As perguntas da entrevista avançada de back-end Java necessárias para a entrevista em 2020. Um guia de revisão é resumido no Github. O conteúdo é detalhado, com fotos e textos. Amigos que precisam aprender podem estrelar!
Endereço GitHub: https://github.com/abel-max/Java-Study-Note/tree/master

(1) Tarefas assíncronas
A demanda por tarefas assíncronas é frequentemente encontrada em cenários reais de desenvolvimento. Existem muitas maneiras de obter assincronia em Java, como multithreading para obter assincronia. No SpringBoot, a realização de tarefas assíncronas precisa apenas adicionar duas anotações. Adicione a anotação @Async à classe atual, adicione @EnableAsync para iniciar a classe

Escreva um serviço, AsynService, deixe este serviço pausar por 3 segundos antes de enviar os dados

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

Escreva o controlador e chame esta classe de serviço

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

Depois de executar, visite http: // localhost: 8080 / index no navegador e você verá que, como a assincronia está ativada, o navegador produzirá a tarefa assíncrona primeiro e o console exibirá o fim da execução após três segundos.

(2) Tarefas cronometradas
Eu usei tarefas cronometradas no projeto de código aberto anterior de pico. Na cena naquele momento, eu pesquisei o banco de dados a cada 1 minuto para consultar produtos expirados. As tarefas agendadas têm uma ampla variedade de aplicações, como empacotar logs automaticamente às 12 horas todos os dias e fazer backup às 12 horas todas as noites. A realização de tarefas de cronometragem no SpringBoot requer apenas duas anotações: @Scheduled e @EnableScheduling Como antes, @Scheduled é usada para tarefas que precisam ser executadas regularmente e @EnableScheduling é usada para classes de inicialização. Primeiro, vamos escrever a classe de tarefa cronometrada:

@Service
public class ScheduleService {

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

Uma expressão cron precisa ser adicionada à anotação @Scheduled para determinar o tempo de execução da tarefa de temporização. Aqui, significa que ela será executada a cada 10 segundos.

Em seguida, adicione a anotação @EnableScheduling à classe de inicialização. Execute o projeto, você verá que um hello será enviado a cada dez segundos.

Acho que você gosta

Origin blog.csdn.net/qwe123147369/article/details/109180522
Recomendado
Clasificación