这次在使用定时任务的时候,总是被拦截器拦截 (要么改拦截器配置,最好不要动的东西),要么就改自己的方法 :
将方法改为静态方法 绕过拦截器。
此时面临 静态方法中使用注入的问题
/**
* 人员基本信息
* @author lhf
*/
@RequestMapping("/datacollect/rmbInfo")
@Controller
@Component //(把普通pojo实例化到spring容器中,相当于配置文件中的)
泛指各种组件,就是说当我们的类不属于各种归类的时候(不属于@Controller、@Services等的时候),我们就可以使用@Component来标注这个类。
@Configuration // 定时 兼备Component 上面的 @Component 可以去掉
@EnableScheduling // 开启定时任务
public class AddRmbController extends BaseController {
@Autowired
private GenericDelegatorService delegatorService; // 重点 1
@Autowired
private static GenericDelegatorService genericDelegatorService; // 重点 2
@PostConstruct //该注解被用来修饰一个非静态的void()方法。被他修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器执行一次。PostConstruct在构造函数之后执行,init()方法之前执行。
public void init() { // 重点 3
genericDelegatorService = delegatorService;
}
/**
* 添加定时任务 定时更新超龄人员表数据
*/
@Scheduled(cron = "0 0 0/1 * * ?")// 每个整点 0/5 * * * * ? 5
// @Scheduled(fixedRate = 5000)
public static void configureTasks() { // 重点 4 静态方法 使用注入
System.out.println("执行定时任务时间: " + LocalDateTime.now());
String sql1 = "delete from remind where remind_type = '1'";
genericDelegatorService.runDeleteSql(sql1); // 重点 5 可以正常的使用
int sum = genericDelegatorService.runsqlInt("SELECT count(*) FROM a01 WHERE TIMESTAMPDIFF(YEAR,a01.A0107,CURDATE())>'35' and AG0119 = '1'");
String sql = "insert into remind (id,remind_type,matter,person_number) values (UUID(),'1','优秀年轻干部超龄人员',"+ sum +")";
genericDelegatorService.runInsertSql(sql);
}
}