我创建了一个简单的 Spring/Vertx 集成示例应用程序并添加了 Hibernate Reactive 来替换现有的 Postgres Reactive Client API。
源代码:https ://github.com/hantsy/vertx-sandbox/blob/master/mutiny-spring-hibernate
运行应用程序时,我尝试访问 http://localhost:8888/posts,它被阻止并且不返回任何内容,在后台控制台中,打印了 sql。
当我运行测试代码时,它抛出了一个异常,PostRepository
构造函数 0 SessionFactory
bean 没有在 vertx 事件循环上运行。
@Bean
public Mutiny.SessionFactory sessionFactory() {
return Persistence.createEntityManagerFactory("blogPU")
.unwrap(Mutiny.SessionFactory.class);
}
更新:,当我将处理程序代码更改为以下内容时。
this.posts.findAll()
.subscribe()
.with(
data -> {
LOGGER.log(Level.INFO, "posts data: {0}", data);
rc.response().endAndAwait(Json.encode(data));
},
rc::fail
);
在这里,使用endAndAwait
而不是原始end
方法,它可以工作。
但是测试方法仍然失败,因为访问端点时返回了一个空列表/posts
。
当我探索官方指南时:https ://github.com/vertx-howtos/hibernate-reactive-howto ,它SessionFactory
在Verticle
类中创建了 以确保它们在同一个线程上运行。