当前位置: 首页 > 知识库问答 >
问题:

从初始化()访问Dropwzo配置?

齐昆
2023-03-14

我试图为Dropwizard创建一个调度作业,该作业每分钟运行一次,并查询数据库中的值。

为此,我需要在< code>initialize()阶段注册一些Dao和一个服务,如下所示:

@Override
public void initialize(final Bootstrap<KMDServiceConfiguration> bootstrap) {

    //JDBI
    final DBIFactory factory = new DBIFactory();
    final DateTimeArgumentFactory dateTimeFactory = new DateTimeArgumentFactory();
    final DBI jdbi = factory
            .build(environment, config.getDataSourceFactory(), "kmd");
    jdbi.registerArgumentFactory(dateTimeFactory);

    //DAOs
    final UserDao userDao = jdbi.onDemand(UserDao.class);
    final NotificationDao notificationDao = jdbi.onDemand(NotificationDao.class);

    //Domain services
    final UserService userService = new UserServiceImpl(userDao);
    final NotificationService notificationService = new NotificationServiceImpl(notificationDao);

    final MessageService messageService = new MessageServiceImpl(userService, notificationService);


    final Job worker= new MessageWorker(messageService);
    bootstrap.addBundle(new JobsBundle(worker));

JDBI需要Dropw的环境和配置对象。

是否可以在这个阶段访问这些,以便正确设置我的依赖项?

共有1个答案

蒯宇定
2023-03-14

您应该能够从 DW 应用程序类中的“run”方法初始化作业,该方法有权访问配置和环境属性。我整理了一个简单的项目来展示这一点,但这就是运行方法的样子:

@Override
public void run(SOQ49638642Configuration configuration, Environment environment) throws Exception {

    final DBI dbi = (new DBIFactory()).build(environment, configuration.getDataSourceFactory(), "kmd");

    final SOQ49638642Job soq49638642Job = new SOQ49638642Job(new SOQ49638642Service(dbi.onDemand(SOQ49638642Dao.class)));

    final JobsBundle jobsBundle = new JobsBundle(soq49638642Job);

    jobsBundle.run(configuration, environment);
}

据我所知,不可能在“初始化”阶段获取这些对象。您还可以查看类似dropwizard guicey的DW的Guice集成,它为DW中的捆绑包和模块的DI提供了很好的机制

 类似资料:
  • 我正在努力学习Spring并理解它是如何工作的。我已经学习了一些设置Spring和Camel的教程,并使用默认设置进行了操作。 我现在正试图将尽可能多的配置XML文件转换为Java类。到目前为止,我已经成功地在Java类中创建了camel路由(扩展SpringRouteBuilder并实现configure()),以及spring配置文件(Bean)中的所有Bean- 这相当于什么样的非XML?

  • 必需的初始值设定项的访问控制规则似乎与未指定必需的规则不同。为什么?

  • 在 Swift 3 中,dispatch_once函数被删除,迁移指南建议使用初始化闭包: 让myGlobal = { … global包含对闭包调用的初始化…}() _ = myGlobal //使用myGlobal只会在首次使用时调用初始化代码。 我想从初始化闭包中访问“Self”实例变量,如下所示: 为什么“自我”在闭包中是不可接近的,如何才能使它成为现实?

  • 问题内容: 我在我的应用程序中使用ArrayList。 我想知道从Singleton类初始化ArrayList的确切过程。 该数据将在其他一些活动中使用。 有人可以帮助了解Singleton课堂吗? 问题答案: 这是创建单例类的方法: 任何需要调用arrayList的地方都可以: 要将元素添加到数组,请使用: 要么

  • c++中有列表初始化的操作,类似这样: 同时vector也可以这样写: 在网上查阅资料,列表初始化(写法1)用于聚合类,聚合类不能有构造函数。 而写法2应该是调用了vector类的构造函数,那么意味着vector应改该不能使用列表初始化,这是不是矛盾了呢?

  • 在“线性回归的简洁实现”一节中,我们通过init模块来初始化模型的全部参数。我们也介绍了访问模型参数的简单方法。本节将深入讲解如何访问和初始化模型参数,以及如何在多个层之间共享同一份模型参数。 我们先定义一个与上一节中相同的含单隐藏层的多层感知机。我们依然使用默认方式初始化它的参数,并做一次前向计算。与之前不同的是,在这里我们从MXNet中导入了init模块,它包含了多种模型初始化方法。 from