在Hibernate中,定时任务用于在指定时间间隔执行某个操作,常用于数据清理.过期数据处理等场景。主要有以下两种实现方式:
1. @Scheduled注解:
- 在方法上使用@Scheduled注解指定定时任务规则,如cron表达式, fixedDelay等。
- Hibernate会自动根据注解值配置定时任务,并定时执行被注解的方法。
例如:
@Entity
public class Customer { ... }
@Sessional
@Scheduled(cron="0 0 0 * * ?") // 每天0点执行
public void deleteExpiredCustomers(Session session) {
Query query = session.createQuery("delete from Customer where expireDate < ?");
query.setDate(new Date());
query.executeUpdate();
}
2. 自定义定时任务:
- 实现org.hibernate.jpa.HibernateEntityManager#schedule(Runnable, long)方法,传入定时任务逻辑和时间间隔。
- Hibernate会自动配置定时任务,定时执行传入的Runnable。
例如:
@Entity
public class Customer { ... }
@Sessional
public void scheduleDeleteExpiredCustomers(EntityManager em) {
em.unwrap(HibernateEntityManager.class)
.schedule(new Runnable() {
public void run() {
Session session = em.unwrap(Session.class);
Query query = session.createQuery("delete from Customer where expireDate < ?");
query.setDate(new Date());
query.executeUpdate();
}
}, 3600 * 1000); // 每小时执行一次
}