微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

TaskScheduler和Spring侦听器

如何解决TaskScheduler和Spring侦听器

我尝试使用Spring TaskScheduler更改实体,但得到 RollbackException ,因为Spring审计员找不到currentAuditor。而且我什至不知道在哪里可以阅读到如何解决我的问题。如果有人可以帮助我解决问题,我将不胜感激?

由以下原因引起:java.lang.NullPointerException 在com.geleigeit.LinenAndFlowers.config.auditor.AuditorAwareImpl.getCurrentAuditor(AuditorAwareImpl.java:12)〜[classes / :?] 在org.springframework.data.auditing.AuditingHandler.lambda $ touchAuditor $ 6(AuditingHandler.java:193)〜[spring-data-commons-2.3.1.RELEASE.jar:2.3.1.RELEASE] 在java.util.Optional.map(Optional.java:258)〜[?:?]

@Override
@Transactional
@Scheduled(fixedDelay=10000)
public void toInProgress() {
    String currentStatus = "QUEUE";
    String statusToSet = "IN_PROGRESS";
    OrderStatus currentOrderStatus = orderStatusRepository.findByStatus(currentStatus);
    OrderStatus orderStatusToSet = orderStatusRepository.findByStatus(statusToSet);
    try {
        List<Order> orders = repository.findAllByOrderStatus(currentOrderStatus);
        for(Order order : orders) {
            int diff = (int) ((new Date().getTime() - order.getCreatedDate().getTime()) / (24 * 60 * 60 * 100));
            if(diff >= 1) {
                order.setorderStatus(orderStatusToSet);
                repository.save(order);
                logger.info("order status QUEUE was changed to IN_PROGRESS by order.{}",order.hashCode());
            }
        }
    } catch (NullPointerException e) {
        logger.info("no orders with status QUEUE");
    }
}

解决方法

我解决了我的问题。我只是用这种方法验证用户(调度程序)。

Authentication auth = new UsernamePasswordAuthenticationToken(SecurityUser.fromUser(
            userService.getUser(scheduleId)),Role.ADMIN);
    SecurityContextHolder.getContext().setAuthentication(auth);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。