我有一个使用maven在spring框架上开发的应用程序。我有很多模块(每个模块都有自己的 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 上的其他相关问答。
我做错了什么?我该如何解决这个问题?
提前致谢。
您应该通过将
@Component
替换为 @Service
和 @EnableScheduling
来修复。
@Service
@EnableScheduling
public class ScheduledTasks {
. . .
}
您需要在主配置中启用Scheduling
@EnableScheduling
.....
..... other config annotaions
public class ApplicationConfig {
}
您必须在 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");
}
}