我应该为 Vertx 应用程序中的对象创建静态 Vertx 实例吗?

Posted

技术标签:

【中文标题】我应该为 Vertx 应用程序中的对象创建静态 Vertx 实例吗?【英文标题】:Should I create a static Vertx instance for an object in a Vertx application? 【发布时间】:2021-12-08 12:03:31 【问题描述】:

我在我的项目中使用了 vertx,我想当我创建这样的 Java 类时我有一个糟糕的主意

public class MyClass 

   static Vertx vertx = Vertx.vertx();

   public void run() 
       vertx.getOrCreateContext().runOnContext(event -> 
           // run something
       );
   

我在此 run() 函数中运行的所有内容都将异步运行,但我不确定是否推荐。

【问题讨论】:

【参考方案1】:

好吧,如果您有一个 vert.x 应用程序,您可以通过扩展 AbstractVerticle 并使用 getVertx() 方法从中获取 vert.x 对象来获取类中的 Vertx 对象。

另外,Vertx.vertx() 总是创建一个新实例。最好使用Vertx.currentContext().getOwner()之类的东西

请记住,静态对象是在非静态对象和非静态方法运行之前创建的。这意味着如果有一些配置/检查需要在引导时完成(例如指标),它们可能会被遗漏,除非也可以在静态上下文中完成。

【讨论】:

【参考方案2】:

我建议不要这样做。原因是,它会大大降低您为依赖该静态 Vertx 实例的所有类编写测试的能力。

改用依赖注入(或使用其他答案中描述的 Verticles)。

【讨论】:

是的,你是对的,我正在寻找通过在 AbstracrVerticle 中使用 vertx 实例来异步运行我的代码的方法,但它并没有达到我的预期。你能给我一份关于vertx中依赖注入的文档吗? 我建议使用 Google Guice :)

以上是关于我应该为 Vertx 应用程序中的对象创建静态 Vertx 实例吗?的主要内容,如果未能解决你的问题,请参考以下文章

Vertx:java.sql.SQLSyntaxErrorException:用户缺少权限或找不到对象:ACHAT

vert.x学习,动态模板与静态文件的结合

无法使vertx对象无法接受

vertx应用程序中的CORS问题不起作用

Vertx实例的创建流程及内部实现

从 vertx 中的客户端证书中提取用户主体