Java Spring boot@Scheduler在tomcat上不工作
我有一个@Scheduled方法,当我使用嵌入式tomcat构建我的Spring Boot应用程序时,它可以毫无问题地运行。但当我在.war中构建我的项目并使用TomcatV8部署它时,它似乎没有触发。其他功能工作得很好,只是这个调度程序不会在我的服务器上触发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
@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仍然没有希望。。如果你找到了答案,请告诉我