Скомпилируйте Приложения Spring В Собственные Изображения С Помощью Spring Native


Теперь доступна бета-версия Spring Native, предлагающая новый способ развертывания приложений Spring. Spring Native позволяет компилировать приложения Spring в собственные образы с помощью компилятора собственных образов GraalVM.

Какое в этом преимущество? Мгновенный запуск, мгновенная пиковая производительность и снижение потребления памяти, поскольку собственные приложения Spring развертываются как автономный исполняемый файл, а также образ докера, без установки JVM.

В чем недостаток? Дело в том, что процесс сборки GraalVM, который пытается создать максимально оптимальное изображение, выбрасывает много вещей. Это могут быть зависимости, ресурсы или части вашего кода.

Способ смягчить это-передать GraalVM кучу конфигурационных файлов, которые заставят его включить дополнительный материал в изображение.Чтобы автоматизировать этот процесс, вы аннотируете свой код подсказками, чтобы направить плагин Spring AOT на создание этих файлов конфигурации.

Однако пакет Spring Native включает в себя конфигурацию spring-native, которая в истинном духе Spring Boot обрабатывает ее за вас. Он содержит подсказки по настройке для классов Spring, поэтому он заботится о фреймворке без лишних слов. Некоторые драйверы уже были аннотированы, например, драйвер MySQL поддерживает Spring Native с подсказками, которые позволяют создавать правильные записи в файлах собственных образов, reflect-config.json, resource-config.json и native-image.properties

@NativeHint(

триггер = Driver.class,

options = “–включить-все-службы безопасности”,

типы = @TypeHint(типы = {

FailoverConnectionUrl.class,

FailoverDnsSrvConnectionUrl.class,

// …

}), ресурсы = {

@ResourceHint(patterns = “com/mysql/cj/TlsSettings.properties”),

@ResourceHint(patterns = “com.mysql.cj.LocalizedErrorMessages”,

isBundle = true)

})

открытый класс MySqlHints реализует NativeConfiguration {}

Плагин Spring AOT build доступен для bot Maven и Gradle и вызывается перед запуском приложения и тестов, и потенциально может потребовать дополнительной настройки IDE. Источники сгенерированных файлов доступны и могут быть проверены, если в этом есть необходимость.

Эта необходимость возникает в следующих ситуациях, когда требуется конкретизация дополнительной собственной конфигурации:

Когда сериализация на основе отражения используется в программном API, таком как WebClient с Джексоном

При попытке использовать функцию или библиотеку, которые еще не поддерживаются Spring Native

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

В этих обстоятельствах вы можете аннотировать классы, уже аннотированные с помощью @Configuration или @SpringBootApplication с помощью @NativeHint, или в достаточно простых случаях напрямую использовать @TypeHint (@NativeHint-это контейнер для многих видов конфигурации, включая @typehint).

Это означает, что в большинстве случаев ваше приложение Spring boot, включая JPA и Spring Security, будет компилироваться в native просто отлично, за исключением случаев, когда у вас есть какие-то причудливые зависимости, которые вам нужно будет включить самостоятельно, подсказывая или настраивая сгенерированные файлы конфигурации.

Помимо JPA и Spring Security , Spring Native также работает с Spring Cloud, так что вы можете скомпилировать функцию Spring Cloud в образ, а затем развернуть ее как в Google Cloud Run или как AWS Lambda!

Хотя в бета-версии Spring Native все еще является экспериментальным, что означает, что вы должны использовать его экономно, а не в производственном коде. Все еще загружаю новое приложение на start.spring.io включает в себя опцию сборки для нативного уже. И на дорожной карте есть много того, чего можно с нетерпением ждать. 


Добавить комментарий