【发布时间】:2022-10-05 18:22:55
【问题描述】:
我正在使用带有 java 11 的 spring boot 2.2.4。
当我在 Spring Boot 应用程序的休息控制器中多次使用服务时,它会在控制台中打印太多警告并最终抛出异常:
WARN 21740 --- [nio-8080-exec-4] o.h.e.loading.internal.LoadContexts : HHH000100: Fail-safe cleanup (collections) : org.hibernate.engine.loading.internal.CollectionLoadContext@70823236<rs=HikariProxyResultSet@1665630462 wrapping Result set representing update count of 4>
WARN 21740 --- [nio-8080-exec-4] o.h.e.loading.internal.LoadContexts : HHH000100: Fail-safe cleanup (collections) : org.hibernate.engine.loading.internal.CollectionLoadContext@3acd228<rs=HikariProxyResultSet@368473467 wrapping Result set representing update count of 4>
ERROR 21740 --- [nio-8080-exec-4] i.m.ExceptionHandling : Handler dispatch failed; nested exception is java.lang.StackOverflowError
这是其余控制器类的一部分:
@CrossOrigin
@RestController
@RequestMapping(\"/api/purchase\")
public class PurchaseController {
private PurchaseService purchaseService;
public PurchaseController(PurchaseService purchaseService) {
this.purchaseService = purchaseService;
}
@PostMapping(\"/create-order\")
public ResponseEntity<PurchaseResponse> createOrder() {
Order order = purchaseService.createOrder(); // first use of service (its ok)
String simple = purchaseService.simple(); // second use of service : this will cause the exception
PurchaseResponse purchaseResponse = new PurchaseResponse(<some argument>);
return new ResponseEntity<>(purchaseResponse,OK);
}
...
}
这是服务类的一部分:
@Service
@Transactional
@Qualifier(\"purchaseService\")
public class PurchaseServiceImpl implements PurchaseService {
private OrderRepository orderRepository;
@Autowired
public PurchaseServiceImpl(OrderRepository orderRepository) {
this.orderRepository = orderRepository;
}
@Override
public Order createOrder() {
...
return new Order();
}
public String simple(){
return \"simple called !\";
}
...
}
请注意 simple() 方法的主体根本不重要,使用任何方法都会导致异常。
提前致谢
-
它似乎不是 Spring Boot 的问题,但使用“简单方法”的逻辑,如果它仍然抛出错误,你可以尝试只从休息端点调用简单方法,你有孤立的问题,否则会发生一些可疑的事情在您的创建和简单 - 准确问题识别需要更多详细信息 - 带有警告日志,看起来您的实体映射不正确
-
只是猜测
simple方法只存在于实现中,而在接口PurchaseService中不可用。如果是这种情况,请尝试在接口中添加simple方法。
标签: java spring-boot rest post service