Springboot定时任务调用

和spring框架相比,spring boot通过简约化的配置使得创建一个定时任务变得简单。通过开启相应的注解就可以进行相应的定时任务的操作。

1.在spring boot的启动类加上开启定时任务的注解@EnableScheuling

@SpringBootApplication
@Component
@ComponentScan
@EnableScheduling
public class ServerApplication {
    private static final Logger logger = LoggerFactory.getLogger("adminLogger");

	public static void main(String[] args) {
	   SpringApplication app = new SpringApplication(ServerApplication.class);  
       app.addListeners(new StartApplicationListener());  
       app.run(args);  
	}
    @Scheduled(cron = "20 46 11 * * ?" )
	public void timerToNow(){
	    AditionService aditionService = (AditionService)SpringUtil.getBean(AditionService.class);
		BaseResponse res = aditionService.timerToNow();
		logger.info(res.toString());
	}
}

2.定义定时任务的注解@Scheduled

在这里解释一下这个注解里面的参数,各个参数所代表的值是:秒,分,时,天,月,周。

所以在这里我定义的就是在11点46分20秒执行定时任务。在public void timerToNow(){}方法中定义你的逻辑处理方式,我这边需要在定义好的时间上获取一个月前的数据,并删除相应的表里面的数据。

@Component
public class AditionService {

    @Autowired
    private PayAcceptOrderOldMapper acceptOrderOldMapper;
    
    @Autowired
    private PayAcceptOrderMapper acceptOrderMapper;

	@Transactional
	public BaseResponse timerToNow(){
		PayAcceptOrderOld payAcceptOrderOld =new PayAcceptOrderOld();
		int flag =acceptOrderOldMapper.insertAddition(payAcceptOrderOld);
		int delfalg = acceptOrderMapper.deleteMonthData();
		if(flag==delfalg){
			System.out.println("adminadmin");
			return BaseResponse.success();
		}else{
			throw new RuntimeException("商户信息添加失败");
		}
	}
}

这里需要注意的是,如果你是多表操作,请务必加上事务的注解,并且在错误的时候抛出相应的异常。

其次,我想说一下查询一张表数据的前30天的数据添加到另外一张表的同时,删除相应表中的数据。其实也就是我上面代码的执行过程。

INSERT INTO pay_accept_order_old SELECT
     t.*, getdate()
	 FROM
	 pay_accept_order t
	 WHERE
	 t.last_updated_time <= dateadd(day,-30, getdate())

查询order表中30天前的数据插入到orderold表中。由于mybatis的关系,小于号我直接转义字符代替了。

<delete id="deleteMonthData">
     delete from pay_accept_order WHERE last_updated_time <= dateadd(day,-30, getdate())
  </delete>

删除相应的30天前的数据,通过比对两者的数据操作条数进行判断,不成功则事务回滚。

相比繁杂的配置,springboot通过少量的配置就达到了相同的结果。

SpringBoot中,可以使用定时任务来定时更新数据库。首先,你需要创建一个定时任务线程池,可以通过创建一个配置类来实现。在这个配置类中,你可以设置线程池的大小、线程名称前缀等参数。\[3\] 接下来,你需要创建一个定时任务的服务类,可以通过实现接口SchedulingConfigurer来实现。在这个服务类中,你可以定义定时任务的执行逻辑。你可以从数据库中读取指定时间来动态执行定时任务。\[1\] 然后,在项目启动时,你可以通过实现ApplicationRunner接口,在run方法中初始化定时任务。你可以注入定时任务的服务类,并调用初始化方法来启动定时任务。\[2\] 这样,当项目启动时,定时任务就会被初始化,并按照设定的时间周期执行更新数据库的操作。 #### 引用[.reference_title] - *1* [springboot定时任务结合数据库](https://blog.csdn.net/weixin_47063459/article/details/120992304)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [基于springboot定时任务的后台管理,使用数据库配置定时任务相关信息,修改,关闭定时任务不需重启项目](https://blog.csdn.net/yaoyipeng/article/details/129482305)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值