- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
tl;dr:您能想到我可以查找哪些 @Scheduled
任务未在 Spring Boot 应用中执行的情况吗?
我实现了 example它工作得很好,但是,在我正在处理的更复杂的 Spring Boot 应用程序中,我无法运行 @Scheduled
方法。
我的主类是这样的:
package com.mypackage.myapp;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
@SpringBootApplication
@EnableWebSecurity
@EnableScheduling
public class MyApp {
public static void main(String[] args) {
SpringApplication.run(MyApp.class);
}
}
预定应用所在的组件如下所示:
(...)
@Component
public class MyComponent {
private static final Logger logger = LoggerFactory.getLogger(MyComponent.class);
(...)
@Scheduled(fixedRate = 5000)
public void myScheduledTask() {
logger.info("Executing scheduled task");
(...)
}
}
整个应用程序显然更复杂,但本质上就是这样。不幸的是,“Executing scheduled task”
没有出现在日志中的任何位置,而且如果我调试断点也永远不会到达。
正如我所说,最小示例适用于我,但在我的应用程序中却并非如此。您能想到我可以检查哪些地方没有执行 @Scheduled
任务吗?例如,配置是否可以被任何东西否决?有什么可以干扰的吗?
我正在使用版本 1.5.1.RELEASE
。
最佳答案
我想我明白了。我有另一个实现 SmartLifecycle
的组件,start()
方法包含一个我永远不会退出的 while
循环(有意地从卡夫卡流)。这实质上会导致初始化被卡住,因此 @Scheduled
方法实际上从未被调度。
我可以在一个带有 while(true)
的最小示例中重现它。一旦我有了它,@Scheduled
方法就不会执行,当我删除 while
时,它工作得很好。
package com.mypackage.myapp;
import java.util.concurrent.CompletableFuture;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.SmartLifecycle;
import org.springframework.stereotype.Component;
@Component
public class StartLoop implements SmartLifecycle {
private static final Logger log = LoggerFactory.getLogger(StartLoop.class);
private static final int LAST_PHASE = Integer.MAX_VALUE;
private boolean running;
@Override
public void start() {
runMyCode();
}
private void runMyCode() {
running = true;
log.info("Starting ...");
while (running) {
try {
log.info("running");
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
@Override
public boolean isRunning() {
return running;
}
@Override
public void stop() {
log.info("Stopping ...");
}
@Override
public void stop(Runnable callback) {
callback.run();
}
@Override
public boolean isAutoStartup() {
return true;
}
@Override
public int getPhase() {
return LAST_PHASE;
}
}
如果我现在将 start()
方法替换为
@Override
public void start() {
CompletableFuture.runAsync(this::runMyCode);
}
它工作得很好。
关于java - 带有 @Scheduled 注释的方法在 Spring Boot 应用程序中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44327147/
今天有小伙伴给我留言问到,try{...}catch(){...}是什么意思?它用来干什么? 简单的说 他们是用来捕获异常的 下面我们通过一个例子来详细讲解下
我正在努力提高网站的可访问性,但我不知道如何在页脚中标记社交媒体链接列表。这些链接指向我在 facecook、twitter 等上的帐户。我不想用 role="navigation" 标记这些链接,因
说现在是 6 点,我有一个 Timer 并在 10 点安排了一个 TimerTask。之后,System DateTime 被其他服务(例如 ntp)调整为 9 点钟。我仍然希望我的 TimerTas
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我就废话不多说了,大家还是直接看代码吧~ ? 1
Maven系列1 1.什么是Maven? Maven是一个项目管理工具,它包含了一个对象模型。一组标准集合,一个依赖管理系统。和用来运行定义在生命周期阶段中插件目标和逻辑。 核心功能 Mav
我是一名优秀的程序员,十分优秀!