在 Spring/Maven 创建的 .war 文件上配置计划任务

问题描述 投票:0回答:3

我有一个使用mavenspring框架上开发的应用程序。我有很多模块(每个模块都有自己的 pom.xml 文件),并且我有通用的 pom.xml 来编译整个项目。

使用 maven 我编译了一个

.war
文件,并将其部署在 Jetty 服务器中,但现在我遇到了另一个问题。我需要配置一个函数,每隔几分钟执行一些代码。 我尝试像在以下链接那样配置它,所以有:

我编辑了特定的 pom.xml 文件并添加了以下内容:

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter</artifactId>
  <version>1.2.1.RELEASE</version>
</dependency>

在依赖项列表中,我将其添加到插件列表中:

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

我在同一模块中创建了一个定义此类的文件:

@Component
public class ScheduledTasks {
  private static final Logger log = LoggerFactory.getLogger(ScheduledTasks.class);

    private static final SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm:ss");

    @Scheduled(fixedDelay = 5000)
    public void reportCurrentTime() {
        log.info("The time is now {}", dateFormat.format(new Date()));
    }
}

但这对我不起作用。日志不打印任何内容。 我已经在这个问题上苦苦挣扎了一段时间,但我没有找到任何解决方案,也查看了 StackOverflow 上的其他相关问答。

我做错了什么?我该如何解决这个问题?

提前致谢。

java spring maven cron
3个回答
0
投票

您应该通过将

@Component
替换为
@Service
@EnableScheduling
来修复。

@Service
@EnableScheduling
public class ScheduledTasks {
    . . .
}

0
投票

您需要在主配置中启用Scheduling

@EnableScheduling
.....
..... other config annotaions
public class ApplicationConfig {
}

0
投票

您必须在 Spring Boot 应用程序类中添加

@EnableScheduling
SpringBootServletInitializer
才能使调度程序在您在 tomcat 上部署 war 文件时工作。

@SpringBootApplication
@EnableScheduling
public class MyApplication extends SpringBootServletInitializer{

}

然后只需在 Spring 托管 bean 中添加带有 @Scheduled 注释的方法即可。

@Service
public class MyService{

    @Scheduled(fixedRate = 60_000)
    public void runEveryMinute(){
        System.out.println("hello");
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.