java - 在使用 webflux 但不使用 JPA 发出请求时,已经为绑定到线程的键值 [org.springframework.orm.jpa.EntityManagerHolder@64fcf46a]
问题描述
我是 webflux 的新手,我正在尝试使用 Mono 创建一个控制器。问题是,当我尝试返回 Mono 时,出现以下异常。
已绑定到线程 [http-nio-8080-exec-2] 的键 [org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean@21708736] 的值 [org.springframework.orm.jpa.EntityManagerHolder@64fcf46a]
这是导致问题的代码片段。
控制器
@RestController
@Slf4j
@Getter(AccessLevel.PRIVATE)
@RequestMapping(ConsultaCNDRoutes.CONSULTA_CND_BASE_ROUTE)
public class ConsultaCNDRest extends RestControllerAuditedBase {
private ConsultaCNDService consultaCNDService;
@Autowired
public ConsultaCNDRest(ConsultaCNDService consultaCNDService) {
this.consultaCNDService = consultaCNDService;
}
@ApiOperation("Checa a disponibilizacao do servico")
@GetMapping(value = ConsultaCNDRoutes.CONSULTA_CND_STATUS_ROUTE,
produces = "application/json")
public Mono<String> checarServicoConsultaCND() {
try {
Mono<String> status = consultaCNDService.consultarServicoCNDStatus();
return status;
} catch (CNDServicoNaoDisponivelException e) {
log.error(e.getMessage());
return Mono.just(e.getMessage());
}
}
}
服务
@Service
@Slf4j
@Getter(AccessLevel.PRIVATE)
public class ConsultaCNDServiceImpl implements ConsultaCNDService {
@Value("${serpro.acesso.token}")
private String token;
private WebClientService webClientService;
private CertidaoCNDService certidaoCNDService;
@Autowired
public ConsultaCNDServiceImpl(WebClientService webClientService, CertidaoCNDService certidaoCNDService) {
this.webClientService = webClientService;
this.certidaoCNDService = certidaoCNDService;
}
@Override
public Mono<String> consultarServicoCNDStatus() {
return Mono.just("HAHAHAHAHAHAHAHAHAHAHAHAHAHA"); //webClientService.getRequest(SerproRoutes.CNDRoutes.STATUS_ROUTE, token);
}
@Override
public CertidaoCNDResponse consultarCertidaoCND(ConsultaCertidaoCNDRequest request) {
// TODO Auto-generated method stub
return null;
}
}
网络客户端
@Override
public Mono<String> getRequest(String url, String token) {
RequestHeadersSpec<?> responseSpec = client.get().uri(url).header("Authorization", token);
Mono<String> serviceResponse = responseSpec.exchangeToMono(r -> {
if (r.statusCode().equals(HttpStatus.OK)) {
return r.bodyToMono(String.class);
} else {
return r.createException().flatMap(Mono::error);
}
});
return serviceResponse;
}
请注意,其中没有引用任何 JPA,但我们使用 JPA 和 Hibernate 来实现持久性。我究竟做错了什么?
解决方案
推荐阅读
- python - 超像素分割的问题(python中的opencv) - 分割掩码的轮廓中的孔
- python - PyCharm:访问同一个项目时,不能在两台不同的计算机上保持相同的解释器
- python - Heroku 远程错误:找不到满足要求 django-admin-black==0.0.1 的版本(来自 -r /tmp/build_e45a4b07/requirements.txt
- time-complexity - 时间复杂度 - 两个未排序的数组
- node.js - NextJS 将数据推送到变量实际上不起作用
- javascript - Vanilla JS,尝试访问数组中的对象
- entity-framework-core - 具有空引用的 EF Core Select 查询
- mysql - 错误 1045 (28000):Amazon Linux 2 上 mysql Ver 15.1 的用户 'root'@'localhost' 的访问被拒绝(使用密码:YES)
- android - 将产品搜索后端添加到 ML Kit 展示中
- python - Discord.py,on_raw_reaction_add add_roles 不起作用