Знаете ли вы, что большинство Java разработчиков активно используют Spring Boot в своей работе? Можно ли утверждать, что
Всем привет! Это канал русскоязычного сообщества Spring Boot - Spring АйО.
Здесь вы найдете новости и контент про Spring, Java и всему, с чем так или иначе соприкасается Spring Boot разработчик. Материалы будут не всегда на русском, но всегда полезные и актуальные.
Добро пожаловать и присоединяйтесь:
😌 @spring_aio
Java разработчик == Spring Boot
разработчик
? Вероятно, да!Всем привет! Это канал русскоязычного сообщества Spring Boot - Spring АйО.
Здесь вы найдете новости и контент про Spring, Java и всему, с чем так или иначе соприкасается Spring Boot разработчик. Материалы будут не всегда на русском, но всегда полезные и актуальные.
Добро пожаловать и присоединяйтесь:
Please open Telegram to view this post
VIEW IN TELEGRAM
21 вопрос на собеседование по Maven.
Вопрос №1: А почему не Gradle? 🤔
А если серьезно, каждая из билд систем имеет свои преимущества. Тем не менее, start.spring.io по умолчанию выбирает Gradle, и что интересно, на Groovy.
🔗 https://www.java67.com/2024/04/top-21-maven-interview-questions.html
Подписывайтесь:
😌 @spring_aio
Вопрос №1: А почему не Gradle? 🤔
А если серьезно, каждая из билд систем имеет свои преимущества. Тем не менее, start.spring.io по умолчанию выбирает Gradle, и что интересно, на Groovy.
🔗 https://www.java67.com/2024/04/top-21-maven-interview-questions.html
Подписывайтесь:
Please open Telegram to view this post
VIEW IN TELEGRAM
Spring AI
Во всём мире сейчас наблюдается ажиотаж вокруг темы искусственного интеллекта и разработки приложений с его использованием. Многие стремятся внедрить искусственный интеллект в свои продукты и воспользоваться всеми его преимуществами. Поэтому сообщество Spring создало модуль 'Spring AI' для упрощения интеграции AI API в приложения Spring. Spring AI — это молодой проект, призванный упростить для разработчиков интеграцию функций искусственного интеллекта в приложения Spring. И он достигает этой цели, предлагая набор абстракций и инструментов, которые упрощают взаимодействие с такими ИИ-моделями, как OpenAI и Azure OpenAI.
🔗 https://habr.com/ru/companies/otus/articles/814713/
Подписывайтесь:
😌 @spring_aio
Во всём мире сейчас наблюдается ажиотаж вокруг темы искусственного интеллекта и разработки приложений с его использованием. Многие стремятся внедрить искусственный интеллект в свои продукты и воспользоваться всеми его преимуществами. Поэтому сообщество Spring создало модуль 'Spring AI' для упрощения интеграции AI API в приложения Spring. Spring AI — это молодой проект, призванный упростить для разработчиков интеграцию функций искусственного интеллекта в приложения Spring. И он достигает этой цели, предлагая набор абстракций и инструментов, которые упрощают взаимодействие с такими ИИ-моделями, как OpenAI и Azure OpenAI.
🔗 https://habr.com/ru/companies/otus/articles/814713/
Подписывайтесь:
Please open Telegram to view this post
VIEW IN TELEGRAM
IntelliJ IDEA
IntelliJ IDEA 2024.1 приносит множество новых функций, среди которых особенно выделяются навигация к логгеру и inline breakpoints. Теперь вы можете быстро переходить к соответствующему логгеру из лог-сообщения, что значительно упрощает отладку и анализ логов. Inline breakpoints позволяют устанавливать точки останова прямо в редакторе, что делает процесс отладки более интуитивным и удобным. Эти обновления делают IntelliJ IDEA еще более мощным инструментом для разработчиков. Также доступно в Community Edition.
#IntelliJ #IDE
🔗 https://blog.jetbrains.com/idea/2024/02/intellij-idea-2024-1-eap-6
Подписывайтесь:
😌 @spring_aio
IntelliJ IDEA 2024.1 приносит множество новых функций, среди которых особенно выделяются навигация к логгеру и inline breakpoints. Теперь вы можете быстро переходить к соответствующему логгеру из лог-сообщения, что значительно упрощает отладку и анализ логов. Inline breakpoints позволяют устанавливать точки останова прямо в редакторе, что делает процесс отладки более интуитивным и удобным. Эти обновления делают IntelliJ IDEA еще более мощным инструментом для разработчиков. Также доступно в Community Edition.
#IntelliJ #IDE
🔗 https://blog.jetbrains.com/idea/2024/02/intellij-idea-2024-1-eap-6
Подписывайтесь:
Please open Telegram to view this post
VIEW IN TELEGRAM
Вышел Spring Boot 3.3.0. В обновлении представлены следующие нововведения:
🚀 Поддержка CDS для ускорения времени запуска.
🔍 Улучшение Observability.
🔐 Новые возможности Spring Security.
🧵 Поддержка виртуальных потоков для вебсокетов.
⚡ Обновление зависимостей и многое другое.
#Spring #SpringBoot
🔗 https://spring.io/blog/2024/05/23/spring-boot-3-3-0-available-now
Подписывайтесь:
😌 @spring_aio
🚀 Поддержка CDS для ускорения времени запуска.
🔍 Улучшение Observability.
🔐 Новые возможности Spring Security.
🧵 Поддержка виртуальных потоков для вебсокетов.
⚡ Обновление зависимостей и многое другое.
#Spring #SpringBoot
🔗 https://spring.io/blog/2024/05/23/spring-boot-3-3-0-available-now
Подписывайтесь:
Please open Telegram to view this post
VIEW IN TELEGRAM
А тем временем, вышел Kotlin 2.0!
Основные изменения включают стабилизацию нового компилятора Kotlin K2, улучшение работы с многоплатформенными проектами, поддержку новых плагинов и улучшения производительности компилятора. В новой версии также прокачали smart-cast, а также ускорили работу IDE.
Несколько странно выглядит smart-cast для операций decrement и increment, меняющих тип объекта 🤯
#Kotlin
🔗 https://kotlinlang.org/docs/whatsnew20.html
Подписывайтесь:
😌 @spring_aio
Основные изменения включают стабилизацию нового компилятора Kotlin K2, улучшение работы с многоплатформенными проектами, поддержку новых плагинов и улучшения производительности компилятора. В новой версии также прокачали smart-cast, а также ускорили работу IDE.
Несколько странно выглядит smart-cast для операций decrement и increment, меняющих тип объекта 🤯
interface Rho {
operator fun inc(): Sigma = TODO()
}
var unknownObject: Rho = TODO()
++unknownObject // после этого unknownObject: Sigma 🤪 но Kotlin знает об этом)
#Kotlin
🔗 https://kotlinlang.org/docs/whatsnew20.html
Подписывайтесь:
Please open Telegram to view this post
VIEW IN TELEGRAM
Kotlin Help
What's new in Kotlin 2.0.0 | Kotlin
This media is not supported in your browser
VIEW IN TELEGRAM
Когда меня просят стартануть проект не на Spring Boot 😂
Иногда полезно освежить в памяти базовые принципы фреймворка. В Spring Framework центральное место занимает Bean. В своем видео Джош Лонг рассказывает об истории Bean и его жизненном цикле.
#SpringTips #SpringBoot
📱 https://www.youtube.com/watch?v=Z5hxolai4Tk
Подписывайтесь:
😌 @spring_aio
#SpringTips #SpringBoot
Подписывайтесь:
Please open Telegram to view this post
VIEW IN TELEGRAM
Hibernate — очень мощный и функциональный ORM (Object-Relational Mapping) фреймворк. Он связывает базы данных с помощью объектно-ориентированных языков программирования. Однако многие, начиная с ним работать, натыкаются на проблемы производительности или отсутствия нужной функциональности. Многие из этих проблем появляются просто из-за того, что разработчики не умеют его «готовить».
🔗 https://habr.com/ru/companies/magnit/articles/814573/
Подписывайтесь:
😌 @spring_aio
🔗 https://habr.com/ru/companies/magnit/articles/814573/
Подписывайтесь:
Please open Telegram to view this post
VIEW IN TELEGRAM
Классная новость для всех Spring Boot разработчиков! Spring Academy дает бесплатный доступ ко всем своим обучающим материалам. 9 курсов и 12 гайдов по Spring Boot.
P.S. Есть сложности в регистрации из РФ.
🔗 https://spring.academy/
Подписывайтесь:
😌 @spring_aio
P.S. Есть сложности в регистрации из РФ.
🔗 https://spring.academy/
Подписывайтесь:
Please open Telegram to view this post
VIEW IN TELEGRAM
Контейнеризовать Spring Boot приложение можно так:
FROM gradle:8.5.0-jdk21
WORKDIR /
COPY / .
RUN ./gradlew installDist
CMD ./build/install/app/bin/app
И так:
FROM bellsoft/liberica-openjdk-alpine:21 AS builder
WORKDIR /application
COPY . .
RUN --mount=type=cache,target=/root/.gradle chmod +x gradlew && ./gradlew clean build -x test
FROM bellsoft/liberica-openjre-alpine:21 AS layers
WORKDIR /application
COPY --from=builder /application/build/libs/*.jar app.jar
RUN java -Djarmode=layertools -jar app.jar extract
FROM bellsoft/liberica-openjre-alpine:21
VOLUME /tmp
RUN adduser -S spring-user
USER spring-user
COPY --from=layers /application/dependencies/ ./
COPY --from=layers /application/spring-boot-loader/ ./
COPY --from=layers /application/snapshot-dependencies/ ./
COPY --from=layers /application/application/ ./
ENTRYPOINT ["java", "org.springframework.boot.loader.launch.JarLauncher"]
Второй вариант с одной стороны намного сложнее реализовать, но с другой стороны он даёт множество преимуществ, среди которых можно отметить:
🔗 Подробнее о том, как написать идеальный Dockerfile тут: https://spring.io/guides/topicals/spring-boot-docker
Подписывайтесь:
Please open Telegram to view this post
VIEW IN TELEGRAM
Spring Стартер Недели
Как сделать CRUD за 5 минут? Создаем модель данных, репозиторий, контроллер с 5-8 методами и, возможно, несколько dto. Если печатать со скоростью 600 символов в минуту, то можно успеть 🙈
Или берем Spring Data Rest, и получаем круды для своих репозиториев из коробки. И не только круды. Можно выставить наружу любой метод доступа к данным, прикрутить пагинацию и сортировку.
Однако, быстрый старт в начале может обернуться болью в процессе кастомизации или добавлении сложной (и не очень) логики. Тем не менее, выглядит как вполне себе хорошее решение для небольших REST сервисов, почти что Low Code 🙃.
Больше информации о данном стартере можно получить из доклада Рустама Курамшина на JPoint 2023.
📱 https://www.youtube.com/watch?v=roaGUHaWPxw
🔗 https://spring.io/projects/spring-data-rest
#SpringStarter #SpringBoot
Подписывайтесь:
😌 @spring_aio
Как сделать CRUD за 5 минут? Создаем модель данных, репозиторий, контроллер с 5-8 методами и, возможно, несколько dto. Если печатать со скоростью 600 символов в минуту, то можно успеть 🙈
Или берем Spring Data Rest, и получаем круды для своих репозиториев из коробки. И не только круды. Можно выставить наружу любой метод доступа к данным, прикрутить пагинацию и сортировку.
Однако, быстрый старт в начале может обернуться болью в процессе кастомизации или добавлении сложной (и не очень) логики. Тем не менее, выглядит как вполне себе хорошее решение для небольших REST сервисов, почти что Low Code 🙃.
Больше информации о данном стартере можно получить из доклада Рустама Курамшина на JPoint 2023.
🔗 https://spring.io/projects/spring-data-rest
#SpringStarter #SpringBoot
Подписывайтесь:
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Не то чтобы, нас сильно интересовал Python, но анимация очень интересная.
Жизненный цикл кода от IDE до рабочей программы.
Жизненный цикл кода от IDE до рабочей программы.
В Kotlin 2.1 анонсировали новую интересную функцию под названием "when guards", которая расширяет возможности конструкции when. Guard'ы позволяют добавлять дополнительные проверки с помощью ключевого слова if.
Что интересно, это, кажется, первая фича языка, которую Kotlin взял из Java.
Какой вариант вам кажется более предпочтительным?
👍 - Kotlin, ❤️ - Java
fun printAnimalInfo(animal: Animal) {
when (animal) {
is Animal.Dog if animal.isFriendly -> {
println("This is a friendly dog named ${animal.name}.")
}
is Animal.Dog -> {
println("This is a dog named ${animal.name}.")
}
is Animal.Cat if animal.isLazy -> {
println("This is a lazy cat named ${animal.name}.")
}
is Animal.Cat -> {
println("This is a cat named ${animal.name}.")
}
}
}
sealed class Animal {
class Dog(val name: String, val isFriendly: Boolean) : Animal()
class Cat(val name: String, val isLazy: Boolean) : Animal()
}
Что интересно, это, кажется, первая фича языка, которую Kotlin взял из Java.
record Point(int x, int y) {
}
class Cartesian {
static void printQuadrant(Point p) {
switch (p) {
case Point(var x, var y) when x > 0 && y > 0 -> {
System.out.println("first");
}
default ->
System.out.println("other");
}
}
}
Какой вариант вам кажется более предпочтительным?
👍 - Kotlin, ❤️ - Java
🕐 Тонкое управление Scheduled задачами в Spring
Какими способами можно настроить время и условие запуска Scheduled задач в Spring?
Первый способ - через
Но в таком варианте, мы управляем только условием запуска, но не можем настроить переодичность.
Другой вариант, это объявление cron expression в пропертях:
Но как тогда в таком случае отключить джобу? В качестве cron expression можно использовать дефис(-), что означает, что джобу запускать не нужно вовсе. И тогда мы обходимся без явного перечисления профилей в
Такой подход особо полезен при использовании spring-cloud-config, тогда нет необходимости делать передеплой приложения, чтобы выключить, или донастроить джобу. Нужно только не забыть повесить
#SpringBoot #SpringTips
Какими способами можно настроить время и условие запуска Scheduled задач в Spring?
Первый способ - через
@Profile
над сервисом, в котором объявлена задача, чтобы указать профили, в которых она должна (или не должна) запускаться.
java
@Profile("test,!prod")
class Teapot {
@Scheduled(cron = "0 15 10 15 * ?")
void makeTea() {
log.info("I'am a teapot.");
}
}
Но в таком варианте, мы управляем только условием запуска, но не можем настроить переодичность.
Другой вариант, это объявление cron expression в пропертях:
#application-test.properties
teapot.make_tea.cron=0 15 10 15 * ?
@Scheduled(cron = "${teapot.make_tea.cron}")
void makeTea() {
log.info("I'am a teapot.");
}
Но как тогда в таком случае отключить джобу? В качестве cron expression можно использовать дефис(-), что означает, что джобу запускать не нужно вовсе. И тогда мы обходимся без явного перечисления профилей в
@Profile
.
#application-prod.properties
teapot.make_tea.cron=-
Такой подход особо полезен при использовании spring-cloud-config, тогда нет необходимости делать передеплой приложения, чтобы выключить, или донастроить джобу. Нужно только не забыть повесить
@RefreshScope
на класс.#SpringBoot #SpringTips