问题描述
我尝试使用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);