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);