BOOKJAVA Telegram 4032
Хочу показать, как за 5 минут включить виртуальные потоки (Project Loom) и не словить типичные грабли. Работает на Java 21+.

📌 Включение (авто)


# application.yml
spring:
threads:
virtual:
enabled: true # MVC, @Async, schedulers получат VirtualThreadPerTaskExecutor


📌 Ручной контроль (если нужен кастом)


@Bean
TaskExecutor vthreads() {
return new TaskExecutorAdapter(Executors.newVirtualThreadPerTaskExecutor());
}

// Привязать к @Async по умолчанию:
@Bean(name = {TaskExecutionAutoConfiguration.APPLICATION_TASK_EXECUTOR_BEAN_NAME})
TaskExecutor appExecutor() { return vthreads(); }


💡 Tomcat под Loom (MVC)


server:
tomcat:
threads:
max: 200 # это число платформенных (!) потоков, оставьте умеренным


💡 JDBC и пул соединений
Виртуальные потоки не отменяют лимиты БД. Не раздувайте пул, наоборот:


spring:
datasource:
hikari:
maximum-pool-size: 20 # ориентируйтесь на лимиты БД/кейсы, а не на «тысячи» v-threads
minimum-idle: 5


⚠️ Три частые ошибки

1. ThreadLocal-засады. Виртуальные потоки дешёвые, но ThreadLocal всё так же утекает. Используйте @Transactional /Context Propagation или ScopedValue вместо самодельных ThreadLocal.

2. Блокирующие HTTP-клиенты. Для массового I/O берите HttpClient (JDK) или WebClient c ограничением пула сокетов; не плодите соединения до бесконечности — узкое место сеть/БД.

3. Метрики и трейсинг. Обновите Micrometer/Brave до версий, корректно работающих с виртуальными потоками, и включите @Observed — без этого дебаг станет болью.

Когда включать?

- Много блокирующего I/O (JDBC, REST к внешним сервисам) → почти всегда плюс.
- Чисто CPU-bound → выгоды мало, но и вреда нет.

Бонус: быстрый smoke-тест


IntStream.range(0, 10_000).parallel()
.forEach(i -> RestClient.create().get().uri("https://example.com").retrieve().toBodilessEntity());


С Virtual Threads сервер не «захлебнётся» потоками — упадёте ровно в реальные лимиты: БД, сеть, таймауты. Мониторьте их, а не «число потоков».

Мы в MAX

👉@BookJava
👍3



tgoop.com/BookJava/4032
Create:
Last Update:

Хочу показать, как за 5 минут включить виртуальные потоки (Project Loom) и не словить типичные грабли. Работает на Java 21+.

📌 Включение (авто)


# application.yml
spring:
threads:
virtual:
enabled: true # MVC, @Async, schedulers получат VirtualThreadPerTaskExecutor


📌 Ручной контроль (если нужен кастом)


@Bean
TaskExecutor vthreads() {
return new TaskExecutorAdapter(Executors.newVirtualThreadPerTaskExecutor());
}

// Привязать к @Async по умолчанию:
@Bean(name = {TaskExecutionAutoConfiguration.APPLICATION_TASK_EXECUTOR_BEAN_NAME})
TaskExecutor appExecutor() { return vthreads(); }


💡 Tomcat под Loom (MVC)


server:
tomcat:
threads:
max: 200 # это число платформенных (!) потоков, оставьте умеренным


💡 JDBC и пул соединений
Виртуальные потоки не отменяют лимиты БД. Не раздувайте пул, наоборот:


spring:
datasource:
hikari:
maximum-pool-size: 20 # ориентируйтесь на лимиты БД/кейсы, а не на «тысячи» v-threads
minimum-idle: 5


⚠️ Три частые ошибки

1. ThreadLocal-засады. Виртуальные потоки дешёвые, но ThreadLocal всё так же утекает. Используйте @Transactional /Context Propagation или ScopedValue вместо самодельных ThreadLocal.

2. Блокирующие HTTP-клиенты. Для массового I/O берите HttpClient (JDK) или WebClient c ограничением пула сокетов; не плодите соединения до бесконечности — узкое место сеть/БД.

3. Метрики и трейсинг. Обновите Micrometer/Brave до версий, корректно работающих с виртуальными потоками, и включите @Observed — без этого дебаг станет болью.

Когда включать?

- Много блокирующего I/O (JDBC, REST к внешним сервисам) → почти всегда плюс.
- Чисто CPU-bound → выгоды мало, но и вреда нет.

Бонус: быстрый smoke-тест


IntStream.range(0, 10_000).parallel()
.forEach(i -> RestClient.create().get().uri("https://example.com").retrieve().toBodilessEntity());


С Virtual Threads сервер не «захлебнётся» потоками — упадёте ровно в реальные лимиты: БД, сеть, таймауты. Мониторьте их, а не «число потоков».

Мы в MAX

👉@BookJava

BY Библиотека Java разработчика


Share with your friend now:
tgoop.com/BookJava/4032

View MORE
Open in Telegram


Telegram News

Date: |

‘Ban’ on Telegram Other crimes that the SUCK Channel incited under Ng’s watch included using corrosive chemicals to make explosives and causing grievous bodily harm with intent. The court also found Ng responsible for calling on people to assist protesters who clashed violently with police at several universities in November 2019. As the broader market downturn continues, yelling online has become the crypto trader’s latest coping mechanism after the rise of Goblintown Ethereum NFTs at the end of May and beginning of June, where holders made incoherent groaning sounds and role-played as urine-loving goblin creatures in late-night Twitter Spaces. It’s yet another bloodbath on Satoshi Street. As of press time, Bitcoin (BTC) and the broader cryptocurrency market have corrected another 10 percent amid a massive sell-off. Ethereum (EHT) is down a staggering 15 percent moving close to $1,000, down more than 42 percent on the weekly chart. How to create a business channel on Telegram? (Tutorial)
from us


Telegram Библиотека Java разработчика
FROM American