Java Spring boot@Scheduler在tomcat上不工作

Java Spring boot@Scheduler在tomcat上不工作,java,spring-boot,quartz-scheduler,tomcat8,Java,Spring Boot,Quartz Scheduler,Tomcat8,我有一个@Scheduled方法,当我使用嵌入式tomcat构建我的Spring Boot应用程序时,它可以毫无问题地运行。但当我在.war中构建我的项目并使用TomcatV8部署它时,它似乎没有触发。其他功能工作得很好,只是这个调度程序不会在我的服务器上触发 @Component public class DeleteUser { @Autowired private UserService userService; @Autowired private UserAuthoritiesSe

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

@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()));
  }
}
@组件
公共类删除用户{
@自动连线
私人用户服务;
@自动连线
私有用户权限服务用户权限服务;
私有静态最终记录器Logger=LoggerFactory.getLogger(DeleteUser.class);
私有静态最终SimpleDataFormat dateFormat=新SimpleDataFormat(“HH:mm:ss”);
//(cron=“秒、分、时、月日、月、周日”)
@计划(cron=“0 0 8***”,zone=“亚洲/吉隆坡”)
公共无效schedulerDeleteUser(){
List ls=userService.getAllInactiveUser3Day(新日期());
试一试{
如果(ls.size()>0){
用于(用户:ls){
userService.updateStatusAccount(false,user.getId());
}
}
}
捕获(例外e){
logger.error(例如getMessage());
}
info(“调度程序在{}运行”,dateFormat.format(new Date());
}
}

我也遇到了同样的问题:在内置的tomcat服务器上,一切都正常,但没有 当我将.war文件部署到生产环境中时。我尝试了一些方法来解决这个问题(不记得具体哪一个有效),最终我得到了以下结果:

  • 我有专用的计划程序配置类:

    @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
    注释(我以前没有第二个注释)

  • 最后但并非最不重要的一点是,我注意到我的主应用程序类没有扩展
    SpringBootServletInitializer
    ,因此我也解决了这个问题:

    public class SpringBootApplication extends SpringBootServletInitializer {
        public static void main(String[] args) {
            SpringApplication.run(MarketplaceMonitorApplication.class, args);
        }
    }
    
    如果没有它,应用程序将启动,但
    @Scheduling
    无法工作。。或者我早些时候把它修好了,忘了:-)不管怎样,请确保你有它!;-)


  • 现在一切都按预期进行了。

    您@EnableScheduling添加了此注释吗?是的。我已经启用了。如果在spring boot中使用嵌入式服务器,它可以正常工作。但如果我在tomcat中安装并导出它的文件。那个调度器好像不工作了Hi@FlyingTurtle,你最终解决了吗?我现在面临着完全相同的问题,因此这个问题。@ADi3ek仍然没有希望。。如果你找到了答案,请告诉我