Какое количество контейнеров может быть в Java-проекте?

«Какое количество контейнеров может быть в Java-проекте?» — вопрос из категории DevOps, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Количество контейнеров зависит от контекста и используемых технологий:

  • Spring Framework: Обычно создается один корневой ApplicationContext. Однако можно создавать иерархию контекстов (родительский и дочерние), что полезно для модульной структуры.
  • Servlet-контейнеры (Tomcat, Jetty): Как правило, один контейнер на веб-приложение (WAR), но поддерживаются вложенные контексты для отдельных модулей.
  • Docker/Контейнеризация приложений: Количество ограничено только ресурсами хостовой системы.

Пример создания иерархии контекстов в Spring:

// Родительский контекст
ApplicationContext parentCtx = new ClassPathXmlApplicationContext("parent-config.xml");

// Дочерний контекст, наследующий бины родителя
ApplicationContext childCtx = new ClassPathXmlApplicationContext(
        new String[] {"child-config.xml"}, parentCtx);

Практика: В большинстве монолитных приложений используется один контейнер. Несколько контейнеров характерны для сложных систем: мультимодульных приложений, микросервисной архитектуры или при изоляции компонентов.