Официально выпущен Spring Boot 3.2 с множеством новых функций, доступных прямо из коробки!
Официально выпущен Spring Boot 3.2 с множеством новых функций, доступных прямо из коробки!

Привет всем, я Букай Чен~

Spring Boot 3.2 Выпущено вчера, давайте воспользуемся Java 21、GraalVM ивиртуальный потокприди и попробуй。

Spring Boot 3.2 поддерживает:

  • Java 21
  • виртуальный поток
  • Собственные образы (Spring Boot поддерживает собственные образы GraalVM в производственных средах с момента выпуска Spring Boot 3.0 в ноябре 2022 г.)

Java 21

Мы с нетерпением ждем выхода Java 21, который выйдет 19 сентября 2023 года, а Spring Boot 3.2 уже полностью поддерживается.

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

виртуальный поток

Одно из наиболее важных обновлений — виртуальный. поток, это Project Loom Предусмотренные функции. Мы не будем вдаваться в подробности, это официально. JEP Дано хорошее объяснение:

https://openjdk.org/jeps/444

GraalVM и собственные образы

GraalVM — это высокопроизводительный JDK, который использует альтернативный JIT-компилятор для повышения производительности приложений на основе Java и JVM.

Native Image Это своего рода аванс Java код Технология, которая компилируется в отдельный исполняемый файл (называемый собственным образом). Исполняемый файл включает класс прикладной программы, классы в его зависимостях, классы библиотеки времени выполнения и классы из JDK Статическая привязка собственного кода. его там нет Java VM Он работает в другой системе времени выполнения, но содержит необходимые компоненты из разных систем времени выполнения, такие как управление памятью, планирование потоков и т. д. и JVM Полученная программа имеет более быстрое время запуска и меньшие затраты памяти во время выполнения, чем

Попробуйте что-то новое

Начнем с установки Java 21.0.1 graal. Самый простой способ — использовать SDKMAN и указать его в качестве версии Java по умолчанию для вашего компьютера:

  • sdk install java 21.0.1-graal
  • sdk default java 21.0.1-graal

Другой способ установки — загрузка вручную.

https://www.graalvm.org/downloads/

Мы будем использовать страницу Spring Initializr для создания нового проекта Spring Boot с зависимостями Spring Boot 3.2.0, Java 21, Gradle-Groovy и Spring Web и собственной поддержкой GraalVM.

быть в Spring Boot 3.2 включено ввиртуальный поток, нам просто нужно application.yml или application.properties Установите свойство в файле:

код Язык:javascript
копировать
spring.threads.virtual.enabled:true

Что делает эта конфигурация:

  • Tomcat буду использоватьвиртуальный поток для обработки HTTP просить. Это означает обработку Web Запрошенный программный код приложения (например, метод в контроллере) будет находиться в виртуальном Бежать по потоку。
  • При вызове метода @Async Spring MVC Асинхронная обработка запросов и Spring WebFlux Поддержка выполнения блокировки теперь будет использовать виртуальный поток
  • Методы с пометкой @Scheduled будут находиться в виртуальном режиме. Бежать по потоку

Итак, мы попробуем использовать это 3 интеграция для достижения виртуального поток。

также,Некоторые конкретные интеграции будут реализованы в виртуальном потоке.,Например RabbitMQ/Kafka слушатель, и Spring Data Redis/Apache pulsar Сопутствующие интеграции. Однако эти интеграции выходят за рамки этой статьи. Желающие могут обратиться к . Spring Boot 3.2 Официальный пример.

код

1. Для входящих HTTP-запросов от Tomcat создаём простой контроллер:

код Язык:javascript
копировать
@RestController
@RequestMapping("/test")
public class TestController {
    private static final Logger log = LoggerFactory.getLogger(TestController.class);

    @GetMapping
    public void test() {
        log.info("Rest controller method has been called {}", Thread.currentThread());
    }
}

2. Асинхронные задачи

Мы вызовем его метод «run» при запуске приложения.

код Язык:javascript
копировать
@Component
public class AsyncTaskExecutorService {
    private static final Logger log = LoggerFactory.getLogger(AsyncTaskExecutorService.class);

    @Async
    public void run() {
        log.info("Async task method has been called {}", Thread.currentThread());
    }
}

3.Запланированные задачи по времени

Простой метод, вызываемый каждые 15 секунд.

код Язык:javascript
копировать
@Component
public class SchedulerService {
    private static final Logger log = LoggerFactory.getLogger(SchedulerService.class);

    @Scheduled(fixedDelayString = "15000")
    public void run() {
        log.info("Scheduled method has been called {}", Thread.currentThread());
    }
}

Давайте запустим наше приложение:

код Язык:javascript
копировать
./gradlew bootRun

и позвоните в нашу конечную точку

код Язык:javascript
копировать
curl — Расположение — просить GET 'localhost:8085/test'

Что мы получаем:

код Язык:javascript
копировать
Starting AppApplication using Java 21.0.1 with PID 38126
Started AppApplication in 1.131 seconds (process running for 1.491)
Async task method has been called VirtualThread[#52,task-1]/runnable@ForkJoinPool-1-worker-5
Scheduled method has been called VirtualThread[#46,scheduling-1]/runnable@ForkJoinPool-1-worker-1
Rest controller method has been called VirtualThread[#62,tomcat-handler-0]/runnable@ForkJoinPool-1-worker-1
Scheduled method has been called VirtualThread[#46,scheduling-1]/runnable@ForkJoinPool-1-worker-1

Мы видим, что журналы нашего метода связаны с общедоступным пулом потоков ForkJoinPool.

Согласно JEP: Ожидаемое поведение:

JDK извиртуальный Программа диспетчеризации потока украдена ForkJoinPool, который начинается с FIFO режим работы. Степень параллелизма для планирования программы доступна для виртуального планирования. Количество платформ для потокнить.

Теперь давайте запустим его на GraalVM.

Сначала нам нужно создать собственный образ GraalVM: (эта команда может занять несколько минут). Затем запустить: (используйте имя вашего приложения вместо «приложение»)

код Язык:javascript
копировать
./gradlew nativeCompile

./build/native/nativeComplie/app

Он также работает и имеет гораздо более быстрое время запуска, что согласуется с утверждением: «Полученная программа имеет более быстрое время запуска и меньшие затраты памяти во время выполнения по сравнению с JVM».

Здесь вы можете найти исходный код репозитория, содержащего код, используемый в этой статье:

https://github.com/egor-ponomarev/spring-boot3.2-with-graalvm-virtual-threads-example

в заключение

Spring Boot 3.2 Это то, чего мы ждали! Есть виртуальный Собственный образ потока позволяет нам написать программу, которая предоставляет Go аналогичные уровни производительности и масштабируемости, что позволяет поддерживать JVM сильная экосистема.

Однако нужно учитывать, что не все библиотеки адаптировали свой код для работы с виртуальными. поток нормальный Работа (в большинстве случаев используется ReentrantLock замените блок "синхронизировать"), будьте осторожны виртуальный поток будет использовать логику.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose