← Назад к вопросам

Какой использовал сервер приложения?

1.0 Junior🔥 201 комментариев
#Docker, Kubernetes и DevOps#Soft Skills и карьера

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Сервера приложений, с которыми я работал

За 10+ лет опыта в Java разработке я работал с несколькими популярными серверами приложений. Расскажу про каждый и когда я их использовал.

1. Apache Tomcat (основной за последние 5 лет)

Томкат — это классический сервер приложений для Java, который я использую чаще всего:

// Типичная конфигурация Tomcat
// conf/server.xml
<Server port="8005" shutdown="SHUTDOWN">
  <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1" />
    <Engine name="Catalina" defaultHost="localhost">
      <Host name="localhost" appBase="webapps" />
    </Engine>
  </Service>
</Server>

Почему Tomcat:

  • Легкий (в отличие от Java EE серверов)
  • Быстро стартует
  • Легко конфигурируется
  • Подходит для микросервисов
  • Встроен в Spring Boot по умолчанию

Мой опыт:

  • Развертывал приложения через WAR файлы
  • Настраивал connection pools
  • Работал с логированием и мониторингом через JMX
  • Использовал для high-load приложений с балансированием нагрузки

2. Jetty (для встроенных приложений)

Использовал Jetty в основном для небольших приложений и testing:

// Spring Boot может использовать Jetty вместо Tomcat
// Просто исключи Tomcat из зависимостей
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-reactor-netty</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jetty</artifactId>
</dependency>

Преимущества Jetty:

  • Еще более легкий, чем Tomcat
  • Отличная поддержка WebSocket
  • Хороший выбор для микросервисов
  • Меньше памяти при запуске

3. JBoss / WildFly (в корпоративных проектах)

В ранних проектах (2010-2015) работал с JBoss для enterprise-приложений:

// Типичный пример deployment дескриптора
// jboss-web.xml
<jboss-web>
  <context-root>/myapp</context-root>
  <resource-ref>
    <res-ref-name>jdbc/MyDS</res-ref-name>
    <jndi-name>java:jboss/datasources/MyDS</jndi-name>
  </resource-ref>
</jboss-web>

Где использовал:

  • Большие корпоративные приложения
  • Когда нужна была полная Java EE спецификация
  • Работа с JNDI, JTA, и другими enterprise features

Минусы:

  • Тяжелый стартап (минуты)
  • Высокое потребление памяти
  • Сложная конфигурация
  • Сейчас заменяется более легкими решениями

4. Embedded сервера (Spring Boot)

С появлением Spring Boot в 2014+ перешел на embedded сервера:

// Spring Boot автоматически запускает embedded Tomcat
@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

// Настройка через application.properties
server.port=8080
server.servlet.context-path=/api
server.tomcat.threads.max=200
server.tomcat.max-connections=10000

Мой выбор:

  • Embedded Tomcat в 95% случаев (Spring Boot default)
  • Jetty для особо требовательных по памяти проектов
  • Netty для reactive приложений (Project Reactor, WebFlux)

5. Netty (для реактивных приложений)

В последние 2-3 года использую Netty для асинхронных приложений:

// Spring WebFlux использует Netty под капотом
@RestController
public class ReactiveController {
    @GetMapping("/data")
    public Mono<ResponseEntity<Data>> getData() {
        return dataService.getDataAsync()
            .map(ResponseEntity::ok)
            .onErrorResume(e -> Mono.just(
                ResponseEntity.status(500).build()
            ));
    }
}

// Конфигурация для высоконагруженных систем
server.netty.connection-timeout=15000
spring.webflux.base-path=/api

Мой критерий выбора сервера

ПроектСерверПричина
Spring Boot микросервисEmbedded TomcatСтандарт, просто
High-load REST APITomcat + load balancerПроверено временем
Реактивное приложениеNetty (WebFlux)Асинхронность
WebSocket приложениеJettyОтличная поддержка
Enterprise монолитJBossТребовалась Java EE

Что я рекомендую в 2026

  1. Для новых проектов — Spring Boot с embedded Tomcat (по умолчанию)
  2. Для микросервисов — Jetty, чтобы снизить потребление памяти
  3. Для высоконагруженных систем — Tomcat с правильной конфигурацией и балансировкой
  4. Для async/reactive — Project Reactor + Netty

Главный вывод

Выбор сервера приложений зависит от:

  • Типа приложения (синхронное vs асинхронное)
  • Требований по памяти и скорости
  • Нужных фич (WebSocket, HTTP/2, и т.д.)
  • Корпоративных ограничений

Но в 99% случаев для новых проектов я выбираю Spring Boot с embedded Tomcat — это проверенное, надежное и простое решение.

Какой использовал сервер приложения? | PrepBro