Hibernate中如何实现定时任务?代码举例讲解

在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);  // 每小时执行一次
}