Какой использовал сервер приложения?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Сервера приложений, с которыми я работал
За 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 API | Tomcat + load balancer | Проверено временем |
| Реактивное приложение | Netty (WebFlux) | Асинхронность |
| WebSocket приложение | Jetty | Отличная поддержка |
| Enterprise монолит | JBoss | Требовалась Java EE |
Что я рекомендую в 2026
- Для новых проектов — Spring Boot с embedded Tomcat (по умолчанию)
- Для микросервисов — Jetty, чтобы снизить потребление памяти
- Для высоконагруженных систем — Tomcat с правильной конфигурацией и балансировкой
- Для async/reactive — Project Reactor + Netty
Главный вывод
Выбор сервера приложений зависит от:
- Типа приложения (синхронное vs асинхронное)
- Требований по памяти и скорости
- Нужных фич (WebSocket, HTTP/2, и т.д.)
- Корпоративных ограничений
Но в 99% случаев для новых проектов я выбираю Spring Boot с embedded Tomcat — это проверенное, надежное и простое решение.