gpt4 book ai didi

java - Spring boot @Scheduler 无法在 tomcat 上运行

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:21:50 25 4
gpt4 key购买 nike

当我使用嵌入式 tomcat 构建我的 Spring Boot 应用程序时,我有一个 @Scheduled 方法可以正常运行。但是当我在 .war 中构建我的项目并使用 tomcat v8 部署它时,似乎调度程序没有触发。其他功能运行良好,只是这个调度程序不会在我的服务器上触发。

@Component
public class DeleteUser {

@Autowired
private UserService userService;

@Autowired
private UserAuthoritiesService userAuthService;

private static final Logger logger = LoggerFactory.getLogger(DeleteUser.class);

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

//(cron="second, minute, hour, day of month, month, day(s) of week")
@Scheduled(cron="0 0 8 * * *", zone="Asia/Kuala_Lumpur")
public void schedulerDeleteUser() {

List<User> ls = userService.getAllInactiveUser3Day(new Date());

try {
if(ls.size()>0) {

for(User user: ls) {
userService.updateStatusAccount(false, user.getId());
}
}
}
catch(Exception e) {
logger.error(e.getMessage());
}
logger.info("Scheduler run at {}", dateFormat.format(new Date()));
}
}

最佳答案

我有同样的问题:在内置的 tomcat 服务器上一切正常,但不是当我将 .war 文件部署到生产环境中时。我已经尝试了一些方法来解决它(不记得到底是哪一个起作用了),最终我得到了以下结果:

  1. 我有专门的调度器配置类:

    @Configuration
    @EnableScheduling
    @EnableAsync
    public class SchedulerConfiguration implements SchedulingConfigurer {

    private final int POOL_SIZE = 2;
    private final String THREAD_NAME_PREFIX = "task-scheduler-";

    @Override
    public void configureTasks(ScheduledTaskRegistrar scheduledTaskRegistrar) {
    ThreadPoolTaskScheduler threadPoolTaskScheduler = new ThreadPoolTaskScheduler();

    threadPoolTaskScheduler.setPoolSize(POOL_SIZE);
    threadPoolTaskScheduler.setThreadNamePrefix(THREAD_NAME_PREFIX);
    threadPoolTaskScheduler.initialize();

    scheduledTaskRegistrar.setTaskScheduler(threadPoolTaskScheduler);
    }
    }

    我想,上面最重要的是@EnableScheduling@EnableAsync 注解(我之前没有第二个)

  2. 最后但同样重要的是,我注意到我的主要应用程序类没有扩展 SpringBootServletInitializer,所以我也修复了它:

    public class SpringBootApplication extends SpringBootServletInitializer {
    public static void main(String[] args) {
    SpringApplication.run(MarketplaceMonitorApplication.class, args);
    }
    }

    没有它,应用程序启动了,但是 @Scheduling 没有工作.. 或者我早些时候修复了它而忘记了 :-) 不管怎样,请确保你有它! ;-)

现在一切都按预期进行生产。

关于java - Spring boot @Scheduler 无法在 tomcat 上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53940011/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com