问题1
之前定时任务一致好好的,某天突然服务没有执行,重启之后也不执行,本地起服务也不执行。。。。
解决方法 https://blog.csdn.net/weixin_37882382/article/details/82217729
问题2
加了@EnableScheduling
定时器还是不管用
解决方法
定时任务类没有加
@Service
问题3
@Scheduled
定时任务慢,明明时间设置的很快,但是执行很慢
解决方法
@Scheduled
默认是一个线程执行的
以上所有解决代码
@EnableScheduling
加载启动类上(注意一个应用只加一个@EnableScheduling
注解,多了会报错)
package com.drips.config;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import java.util.concurrent.ThreadFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;
/**
*
* @author 易通
* @date 2018/11/28
* 定时任务配置
*/
@Configuration
public class SchedulingConfiguration implements SchedulingConfigurer{
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
//默认是一个线程
taskRegistrar.setScheduler(Executors.newScheduledThreadPool(3000));
// TODO Auto-generated method stub
taskRegistrar.setScheduler(new ScheduledThreadPoolExecutor(Runtime.getRuntime().availableProcessors(),
new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
return new Thread(r,"my-schedule");
}
}));
}
}
package com.drips.config;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service;
/**
*
* @author 易通
* @date 2018/11/28
* 定时任务测试
*/
@Service
public class ScheduledTasks {
private static final Logger logger = LoggerFactory.getLogger(ScheduledTasks.class);
private static final SimpleDateFormat dataFromat = new SimpleDateFormat("HH:mm:ss");
@Scheduled(fixedDelay=2)
public void phoneWorktask() {
logger.info("定时任务开始时间", dataFromat.format(new Date()));
for (int i = 0; i < 100; i++) {
logger.info("第一个线程--"+i);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
logger.info("定时任务结束时间", dataFromat.format(new Date()));
}
@Scheduled(fixedDelay=2)
public void phoneWorktask1() {
logger.info("定时任务开始时间", dataFromat.format(new Date()));
for (int i = 0; i < 100; i++) {
logger.info("第二个线程----"+i);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
logger.info("定时任务结束时间", dataFromat.format(new Date()));
}
@Scheduled(fixedRate=2)
public void phoneWorktask2() {
logger.info("定时任务开始时间", dataFromat.format(new Date()));
for (int i = 0; i < 100; i++) {
logger.info("第四个线程---->>>"+i);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
logger.info("定时任务结束时间", dataFromat.format(new Date()));
}
@Scheduled(cron = "0 * * * * ?")
public void phoneWorktask3() {
logger.info("定时任务开始时间", dataFromat.format(new Date()));
for (int i = 0; i < 100; i++) {
logger.info("第三个线程 ------"+i);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
logger.info("定时任务结束时间", dataFromat.format(new Date()));
}
}