【发布时间】:2021-08-09 16:00:37
【问题描述】:
首先:我不习惯 Quarkus 或 Hibernate(我几乎都是 .net)
问题:
我的服务收到一个约 10k 的列表(我猜这是最常见的数字)。 这来自一个资源端点,它需要 +10 秒才能完成,远至长。而且服务没有响应。
*Endpoint -> Service/Business -> DAO*
@Override
public void create(FooBusiness foo) {
var statuses = new ArrayList<StatusDto>();
for(var i = 1; i < foo.getFromList().size(); i++){
var bar = foo.getFromList().get(i);
statuses.add(new StatusDto(bar.x, bar.y));
}
statusDao.create(statuses);
}
statusDao.Create() 注释为@Transactional:
DAO 是 @ApplicationScoped
这个 EM 是:
@PersistenceContext
EntityManager entityManager;
statusDao.Create():
@Transactional
public List<StatusDto> create(List<StatusDto> dto) {
for(var i = 0; i < dto.size(); i++){
var status = dto.get(i);
status.setCreatedTimestamp(LocalDateTime.now());
entityManager.persist(status);
}
entityManager.flush();
return dto;
}
我已经阅读了很多关于此的帖子,其中许多都建议使用此属性,并将持久循环拆分为与批处理大小相同: quarkus.hibernate-orm.jdbc.statement-batch-size
问题是,当我将它添加到 application.properties 时,我得到了这个 varning:
无法解析配置项'statement-batch-size'
我花了将近一天的时间试图找到如何加快速度的解决方案,我在这里错过了什么明显的东西?
和/或:
我可以将来自service 的调用封装在某种神奇的火焰中并忘记 Quarkus 或 Vert.x 中内置的调用吗?
【问题讨论】:
-
也许你可以试试 Hibernate Reactive:hibernate.org/reactive。还有一个关于在 Quarkus 中使用它的快速入门:github.com/quarkusio/quarkus-quickstarts/tree/main/…
-
我很快就调查过了,但据我了解,这还不支持 H2 数据库吗?我将使用 mariadb 进行尝试,但我们决定使用 H2 作为标准,并在需要时覆盖服务器。编辑:在尝试这个时,我一直在使用 MariaDB,而不是 H2。
标签: java hibernate vert.x quarkus