四时宝库

程序员的知识宝库

如何设置Micronaut定时任务(windows定时计划任务命令)

Micronaut 是一种先进的 Java框架,用于构建轻量级、模块化、易于测试和部署的微服务应用程序。它被设计为快速、低内存消耗的框架,支持多种编程语言和云平台。Micronaut提供了依赖注入、面向切面编程、声明式HTTP客户端和服务器、支持开箱即用的应用程序监视和管理、容器化和部署等功能。它使用了许多现代的技术,如反应式编程、响应式HTTP和非堵塞I/O等,使得开发者可以更加高效的构建现代化的微服务应用程序。

类似于 Spring Boot 框架,Micronaut 中很多特性也类似于 Spring Boot。

在 Micronaut 中,如果我们要设置一个定时任务,类似 Spring Boot 一样,我们可以直接使用注解,如下:

@Singleton 
public class HelloWorldJob {
    private static final Logger LOG = LoggerFactory.getLogger(HelloWorldJob.class); 

    @Scheduled(fixedDelay = "10s") 
    void executeEveryTen() {
        LOG.info("Simple Job every 10 seconds: {}", new SimpleDateFormat("dd/M/yyyy hh:mm:ss").format(new Date()));
    }

    @Scheduled(fixedDelay = "45s", initialDelay = "5s") 
    void executeEveryFourtyFive() {
        LOG.info("Simple Job every 45 seconds: {}", new SimpleDateFormat("dd/M/yyyy hh:mm:ss").format(new Date()));
    }
}

通过注解的形式,可以解决 90% 的定时任务情况,但有些定时任务需要实时生成,即需要通过代码设置。这种情况下注解就无法解决了,需要我们自己在业务中用代码定义定时任务。

我们需要先定义一个实现 Runnable 的定时任务,在任务中声明定时任务要实现的逻辑,示例代码如下:

public class EmailTask implements Runnable {

    private String email;
    private String message;
    private EmailUseCase emailUseCase;

    public EmailTask(EmailUseCase emailUseCase, String email, String message) {
        this.email = email;
        this.message = message;
        this.emailUseCase = emailUseCase;
    }

    @Override
    public void run() {
        emailUseCase.send(email, message);
    }

}

然后在创建定时任务的逻辑中设置定时,示例代码如下:

@Singleton
public class RegisterUseCase {

    private static final Logger LOG = LoggerFactory.getLogger(RegisterUseCase.class);

    protected final TaskScheduler taskScheduler;
    protected final EmailUseCase emailUseCase;

    public RegisterUseCase(EmailUseCase emailUseCase, 
                           @Named(TaskExecutors.SCHEDULED) TaskScheduler taskScheduler) {  
        this.emailUseCase = emailUseCase;
        this.taskScheduler = taskScheduler;
    }

    public void register(String email) {
        LOG.info("saving {} at {}", email, new SimpleDateFormat("dd/M/yyyy hh:mm:ss").format(new Date()));
        scheduleFollowupEmail(email, "Welcome to the Micronaut framework");
    }

    private void scheduleFollowupEmail(String email, String message) {
        EmailTask task = new EmailTask(emailUseCase, email, message); 
        taskScheduler.schedule(Duration.ofMinutes(1), task);  
    }
}

在以上代码中,我们可以看到,定时任务的实例为 TaskScheduler taskScheduler,通过它就可以手动定义定时任务。

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接