删除过期的草稿

草稿的保存时间超过 jmix.uirecovery.drafts.retention 属性所设置的期限后就会过期。扩展组件在找到过期草稿时会将其删除,也就是在用户打开草稿对应的视图或 未保存的草稿 视图时删除。如果用户一直不打开某个视图,其草稿会一直保留在数据库中。如需删除这些草稿,请设置一个定时任务。

该任务调用 ViewDraftService bean 的 deleteExpired() 方法。该方法会删除所有用户的过期草稿,且不需要用户认证,因此可以在任何定时任务中调用。

例如,以下 bean 使用 Spring 的 @Scheduled 注解:

@Component
public class DraftsCleanupJob {

    private static final Logger log = LoggerFactory.getLogger(DraftsCleanupJob.class);

    private final ViewDraftService viewDraftService;

    public DraftsCleanupJob(ViewDraftService viewDraftService) {
        this.viewDraftService = viewDraftService;
    }

    @Scheduled(cron = "0 0 3 * * *") (1)
    public void deleteExpiredDrafts() {
        int count = viewDraftService.deleteExpired(); (2)
        log.info("Deleted {} expired drafts", count);
    }
}
1 每天凌晨 3 点运行该方法。
2 删除过期草稿并返回删除的数量。

必须在配置类中启用 @Scheduled 调度:

@Configuration
@EnableScheduling
public class SchedulingConfiguration {
}

还可以从 Quartz 扩展组件的作业中调用该方法。