首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >应用程序启动期间@NonBlocking与HIbernate ORM的结合

应用程序启动期间@NonBlocking与HIbernate ORM的结合
EN

Stack Overflow用户
提问于 2021-12-26 14:58:07
回答 1查看 210关注 0票数 0

在我的应用程序中,我需要在启动时从数据库初始化内容。

下面的文章:https://quarkus.io/blog/resteasy-reactive-smart-dispatch/提到了以下内容。

“由于Hibernate ORM经典(我们也有Hibernate反应性)是阻塞的,如果不使用@阻塞注释,就不能将它与RESTEasy reactive一起使用。这个注释改变了调度策略,使其使用工作线程(而不是I/O线程)。”

接着,通过查看被调用的方法的签名,简化了这些内容。如果签名意味着同步行为,则选择"worker线程“。如果没有,则首选(更快的)反应机制(i/o线程)。

它还提到Hibernate反应性,而不是Hibernate经典。我还没有探索过那个领域。

但是,从这里开始,我想尝试做以下工作:

代码语言:javascript
复制
@Startup 
@ApplicationScoped
public class I18NBean{

   public static Map<String, String> I18N = init();


   private static Map<String,String> init(){

        // initialize map from DB
   }

   public String translate(String in){
       return I18N.get(in);
   }
}
代码语言:javascript
复制
@Path("/hello")
public class GreetingResource {

  @Inject
  I18NBean translations;

   @POST
   @NonBlocking
   public String hello( String in ) {
       return translations.translate( in );
   }
}

利用I/O线程作为资源,并在启动时执行hibernate (经典的)交互。

简单的问题是:这样做有效吗?我将在接下来的几天里尝试这一点,但是也许我忽略了一些基本的东西,或者可能有一个更好的策略/设计,比如使用生命周期方法。

代码语言:javascript
复制
    void onStart(@Observes StartupEvent ev) {               
        LOGGER.info("The application is starting...");
    } 
EN

回答 1

Stack Overflow用户

发布于 2021-12-26 16:20:17

是的,这会有用的。其思想是,您应该在工作线程上使用普通的Hibernate,而在Vert.x事件循环线程上应该使用Hibernate反应性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70487417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档