DropWizard Bootstrap, конфигурация и среда

Типичное приложение DropWizard определяет подкласс Application и переопределяет его метод initialize следующим образом:

class MyApplication extends Application<MyConfiguration> {
    static void main(String[] args) {
        new MyApplication().run(args)
    }

    @Override
    public void initialize(Bootstrap<MyConfiguration> bootstrap) {
        // ???
    }

    @Override
    public void run(MyConfiguration configuration, Environment environment)
            throws Exception {
        // Register resources, health checks, etc.
    }
}

После просмотра документов DropWizard, а также JavaDocs для:

Но это довольно расплывчатые определения классов, особенно последние два. Я понимаю, что я должен создать подкласс Configuration и что он представляет собой POJO в памяти файла конфигурации YAML/JSON моего приложения.

Но я не могу понять, что представляют собой остальные конструкции (Bootstrap и Environment). Я привык внедрять в свои приложения конфигурации для конкретной среды, поэтому я склонен думать о понятиях "среда" и "конфигурация" как об одном и том же.

Кроме того, кажется, что DropWizard тесно связывает Bootstrap экземпляров с Configuration экземплярами impl, но я не могу найти наглядных примеров того, чем эти два класса отличаются друг от друга и как их следует использовать.

Поэтому я спрашиваю:

  1. Что такое Bootstrap, для чего я его использую?
  2. Что такое Environment и для чего его использовать?

person IAmYourFaja    schedule 09.12.2014    source источник


Ответы (1)


Dropwizard — это, по сути, самоуверенная веб-инфраструктура, в основном используемая в качестве проекта REST API. Классы, о которых вы спрашиваете, являются сутью того, что делает приложение Dropwizard. Разработчики объединили все библиотеки, которые они хотели использовать в своей структуре, и соединили их вместе, чтобы мы могли легко работать с тем, что они загрузили для нас.

Среда — это контейнер Dropwizard Environment, а не личная среда вашего приложения (т. е. локальная или производственная). У него есть свойства, которые являются ключевыми для платформы Dropwizard, такие как веб-контейнер jersey.

Bootstrap - это в основном класс, который связывает все, что используется в среде, включая вашу конфигурацию и приложение.

Если вы посмотрите исходные файлы, вы получите хорошее представление о том, как работают эти классы.

Обновление: В соответствии с вашим вопросом ниже среда не должна использоваться для определения типов подключения к базе данных и учетных данных; для этого предназначен ваш файл конфигурации .yml. Вы захотите поместить в этот файл любые переменные среды, а затем запустить приложение с определенным файлом .yml. У меня лично есть application-local.yml, application-staging.yml и application-prod.yml, и я запускаю свое приложение с соответствующим .yml в зависимости от среды.

Dropwizard автоматически настраивает источники данных с определенными свойствами .yml: см. здесь. .

person th3morg    schedule 09.12.2014
comment
Спасибо @th3morg (+1) - я думаю, что это начало имеет смысл, и я обязательно посмотрю источники, чтобы немного покопаться. Один дополнительный вопрос о Environment: будет ли это использоваться, скажем, для определения того, что мы находимся в версии dev Джерси/Jetty, и поэтому мы должны использовать встроенную базу данных в памяти, а не рабочую версию контейнера, следовательно использовать наш реальный сервер MySQL? Если нет, можете ли вы привести несколько конкретных примеров использования Environment? Спасибо еще раз! - person IAmYourFaja; 10.12.2014
comment
@IAmYourFaja Еще одна вещь, которую я рекомендую сделать, — запустить ваше приложение в режиме отладки в среде IDE, где вы можете приостановить и/или выполнить выполнение через классы Bootstrap и Environment. Вы быстро получите представление обо всей работе, проделанной за кулисами, чтобы все настроить :) - person th3morg; 10.12.2014
comment
Спасибо @ th3morg (+1) - но я работаю в Windows, где у меня нет доступа к IDE, я просто использую обычный блокнот. - person IAmYourFaja; 10.12.2014
comment
Если вы хотите, вы можете получить NetBeans или Eclipse или даже сообщество IntelliJ для всех окон. - person th3morg; 10.12.2014
comment
Я действительно не понимаю, почему класс Bootstrap параметризуется конфигурацией, но нет возможности получить к нему доступ при подготовке пакетов для инициализации (я обычно использую Guice в методе initialize() для внедрения зависимостей в пакеты и мне нужен там доступ к конфигурации) - person macromaniac; 23.02.2016