从Initialize()访问Dropwizard配置?

时间:2018-04-03 20:28:59

标签: dropwizard

我正在尝试为Dropwizard创建一个预定的作业,每分钟都会运行,并在数据库中查询值。

要实现这一点,我需要在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需要Dropwizard environment和配置对象。

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

1 个答案:

答案 0 :(得分:2)

您应该能够从DW Application类中的“run”方法初始化作业,该类可以访问配置和环境属性。我已经整理了一个简单的project来展示这个,但这就是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中的Bundles和Modules的DI提供了很好的机制。

相关问题