Java Vert.x应用部署异常及Hibernate集成问题求助
Vert.x集成Hibernate遇到的两类问题及代码示例
我正在学习Java Vert.x,在部署Verticle应用并集成Hibernate时遇到两个问题:
- 基于main类的实现:程序仅输出一次结果后Vertx就终止运行
- 基于MainVerticle的实现:无法正常启动,出现EventLoop线程阻塞警告,日志如下:
Jul 09, 2023 6:51:50 PM org.hibernate.reactive.pool.impl.DefaultSqlClientPoolConfiguration poolOptions INFO: HR000025: Connection pool size: 10
Jul 09, 2023 6:51:51 PM io.vertx.core.impl.BlockedThreadChecker WARNING: Thread Thread[vert.x-eventloop-thread-2,5,main] has been blocked for 2355 ms, time limit is 2000 ms
Jul 09, 2023 6:51:52 PM io.vertx.core.impl.BlockedThreadChecker WARNING: Thread Thread[vert.x-eventloop-thread-2,5,main] has been blocked for 3355 ms, time limit is 2000 ms
1. main类实现代码
public static void main(String[] args) { Stage.SessionFactory emf = Persistence.createEntityManagerFactory(persistenceUnitName(args)) .unwrap(Stage.SessionFactory.class); // 项目仓库 BookingRepository projectRepository = new BookingRepositoryImp(emf); // 项目服务 BookingService projectService = new BookingServiceImp(projectRepository); BookingHandler bookingHandler = new BookingHandler(projectService); // Web Verticle BookingRouter verticle = new BookingRouter(bookingHandler); Vertx vertx = Vertx.vertx(); vertx.deployVerticle(verticle, options) .onFailure(err -> err.printStackTrace()) .onSuccess(res -> { System.out.println(res); System.out.println("Application is up and running"); }); } public static String persistenceUnitName(String[] args) { return args.length > 0 ? args[0] : "postgresql-example"; }
2. MainVerticle实现代码
public void start(Promise<Void> promise) { Stage.SessionFactory emf = Persistence.createEntityManagerFactory("postgresql-example") .unwrap(Stage.SessionFactory.class); // 项目仓库 BookingRepository projectRepository = new BookingRepositoryImp(emf); // 项目服务 BookingService projectService = new BookingServiceImp(projectRepository); BookingHandler bookingHandler = new BookingHandler(projectService); // Web Verticle BookingRouter bookingRouter = new BookingRouter(bookingHandler, vertx); final Router router = Router.router(vertx); bookingRouter.setRouter(router); buildHttpServer(vertx, promise, router); } private void buildHttpServer(Vertx vertx, Promise<Void> promise, Router router) { vertx.createHttpServer() .requestHandler(router) .listen(8888, http -> { if (http.succeeded()) { promise.complete(); LOGGER.info("running on port : "+8888); } else { promise.fail(http.cause()); LOGGER.info(http.cause()); } }); } public static String persistenceUnitName(String[] args) { return args.length > 0 ? args[0] : "postgresql-example"; }
内容的提问来源于stack exchange,提问作者abdullah Almasri
相关产品推荐
相关产品推荐

