Spring АйО
8.45K subscribers
304 photos
215 videos
404 links
Русскоязычное сообщество Spring-разработчиков.

Habr: bit.ly/433IK46
YouTube: bit.ly/4h3Ci0x
VK: bit.ly/4hF0OG8
Rutube: bit.ly/4b4UeX6
Яндекс Музыка: bit.ly/3EIizWy

Канал для общения: @spring_aio_chat
Download Telegram
👩‍💻 Spring Boot 3.3: повышение производительности, безопасности и  observability

Команда Spring АйО продолжает следить за выходом новых версий популярных технологий. В новом переводе рассказали про основные улучшения, которые вошли в состав Spring Boot 3.3. Среди них:

– Поддержка Class Data Sharing (CDS)
– Улучшение производительности виртуальных потоков для web-сокетов
– Новые свойства для настройки Spring Data JDBC, GraphQL websocket, WebFlux и Tomcat

📚 Подробнее читайте на Хабре
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥52
#SpringHero ⭐️ Rod Johnson

Команда Spring АйО считает важным рассказать о людях, которые внесли наибольший вклад в развитие нашего любимого фреймворка и его экосистемы. В первом посте из серии Spring Hero мы расскажем о создателе Spring.

–––

Rod Johnson получил широкую известность благодаря созданию Spring Framework, который быстро стал одним из самых популярных инструментов для разработки на языке Java.

Первую версию Spring Rod написал сам, и она была выпущена в октябре 2002 года вместе с его книгой "Expert One-on-One J2EE Design and Development". Spring фреймворк стал настоящим прорывом, предложив разработчикам гибкий и мощный инструмент для создания корпоративных приложений. А уже в марте 2004 года вышла первая стабильная версия 1.0.

В августе 2009 года компания VMware приобрела проект за $420 миллионов. Но после этого Rod Johnson не спешил уходить на пенсию. И уже в 2011 году стал председателем компании Neo4j, в 2012 году вошел в совет директоров Typesafe Inc, а в 2016 году основал компанию Atomist.

Сегодня Rod Johnson, судя по описанию на LinkedIn, является членом совета директоров нескольких технологических компаний, таких как Neo Technology, Elasticsearch, Typesafe, Meteor и Hazelcast. А в X (Twitter) он также отметил, что сейчас его внимание сосредоточено на Generative AI.
Please open Telegram to view this post
VIEW IN TELEGRAM
22🔥12👍10👌1
🗓 Еженедельный дайджест №9

Для тех, кто был слишком занят на неделе или просто пропустил некоторые посты, публикуем дайджест!

Scoped Values в Java (Часть 2) – завершили исследование новых возможностей Java, представленных в JEP-481

Вышла IntelliJ IDEA 2024.2 – обсудили основные нововведения новой версии самой популярной IDE

JPA Entity: загрузи меня не полностью – в новой статье рассказали о способах загрузки только действительно нужных полей из базы данных, используя JPA

Spring 6 JdbcClient API – на практике рассмотрели, что из себя представляет JdbcClient API

Spring Boot 3.3: повышение производительности, безопасности и наблюдаемости – узнали о ключевых улучшениях, вошедших в последнюю минорную версию Spring Boot

#SpringHero: Rod Johnson – в новой рубрике рассказали о человеке, чей вклад в наш любимый фреймворк действительно трудно переоценить

😌 @spring_aio
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥64
😏 Как использовать Lombok вместе с JPA

Дискуссии о том, стоит ли использовать Lombok, похоже, будут актуальны еще долго. Решение об использовании этой библиотеки каждый примет сам, а разработчики на Kotlin, вероятно, будут наблюдать за этим спором со стороны с улыбкой 😅

Если же вы всё таки решили использовать Lombok, эта статья расскажет вам о ключевых подводных камнях, которые могут возникнуть во время использования Lombok вместе с JPA.

📚 Подробнее читайте на Хабре
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26🔥74👎2🤯1
🤿 Глубокое погружение в Sealed классы и интерфейсы

В новом переводе от команды Spring АйО рассмотрим, как sealed классы и интерфейсы позволяют строго контролировать иерархию классов, обеспечивая тем самым безопасность и простоту поддержки кода.

Мы познакомимся с ключевыми особенностями sealed классов и интерфейсов, их влиянием на архитектуру приложений и практическими примерами их использования.

📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/837262/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍17🔥75
#ВопросЭксперту: Есть ли в Spring Data JDBC поддержка SpEL?

Во втором посте из цикла "#ВопросЭксперту" Михаил Поливаха рассказал, что из себя представляет поддержка SpEL в Spring Data JDBC и как мы с вами можем сделать её ещё лучше.

–––

Периодически получаю вопросы, связанные с работой Spel-a в Sping Data JDBC (на самом деле, все ниже сказанное относится также к R2DBC модулю). Решил написать пост с объяснением, почему имеем то, что имеем, и, что также важно - что можно улучшить.

Чтобы пояснить проблематику, предлагаю посмотреть на запрос ниже и сказать, все ли в нем корректно:


@Modifying
@Query("update :#{#entityName} set captured = false where captured = true and captured_time < :#{#dateMillis.toEpochMilli()}")
Long updateCaptureFlag(Instant dateMillis);


На самом деле ответ следующий - в целом, этот запрос, с точки зрения SPEL-а, написан вполне корректно. Единственный момент - работать он не будет из-за одного нюанса, который заключается в placeholder-е - в entityName.

Начнем с того, что в рамках запроса в репозитории создается EvaluationContext. Если коротко - это контекст, в рамках которого происходит evalutaion (там находятся пары ключ значение, объекты и т.д - потенциально все, на что мы ссылаемся в рамках Spel-а). Однако в нашем случае Sprign Data JDBC/R2DBC создает его лишь со значениями параметров вызываемого query метода. Иными словами, в рамках expression-а мы можем лишь резолвить ссылки на параметры query метода (updateCaptureFlag например, в нашем случае). Этот момент в целом можно расширить, если работать с EvaluationContextExtension, но конкретно сделать так, чтобы entityName резолвился в имя сущности в текущем контексте запроса не получится.

Наверняка опытные пользователи Spring Data JPA знают, что в ней достаточно давно существует специальный placeholder для того, чтобы внутри запроса по SPEL-у запросить имя сущности. Это бывает полезно, если какой-то общий запрос описывается в родительском репозитории, а в каждом наследнике этого репозитория этот placeholder в запросе будет резолвится в соответствующе конкретное имя сущности. То есть технически на самом деле это реализовать вполне реально.

С другой стороны, обратите внимание, как резолвится #entityName:

> The entityName is resolved as follows: If the domain type has set the name property on the @Entity annotation, it is used. Otherwise, the simple class-name of the domain type is used.


Фактически, для Spring Data JDBC/R2DBC имя класса бесполезно. Данные модули не работают с JPA, там нет Persistence Context-а, JPQL и пр. Поэтому изначально при проектировании этого не было заложено, но, как оказалось, потребность в этом есть.

Тогда, если сформулировать корректно, нас должна интересовать возможность иметь placeholder с указанием на актуальное имя таблицы, которое ассоциировано с тем aggregate-ом, которым мы оперируем.

Именно такой тред обсуждения мы недавно завели на GitHub: https://github.com/spring-projects/spring-data-relational/issues/1856

Поэтому, если есть интерес, можете зайти и выразить поддержку этому треду комментарием/лайком.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍165🔥2
⚡️ Spring АйО x Amplicode

3 сентября в 18:00 МСК эксперты сообщества Spring АйО примут участие в самом жарком событии этой осени для Spring-разработчиков!

В течении полутора часов одни из самых опытных Java-разработчиков будут проверять на прочность Amplicode!

В мероприятии примут участие:
* Илья Сазонов
* Федор Сазонов
* Павел Кислов
* Рустам Курамшин
* и многие другие!

Регистрируйтесь абсолютно бесплатно уже сейчас, чтобы не пропустить!

🔗 ЗАРЕГИСТРИРОВАТЬСЯ
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍106😁1
⌛️ JSpecify 1.0.0 и nullability в Java

Рады сообщить, что JSpecify 1.0.0 теперь доступен в Maven Central: четыре аннотации, связанные с nullability — @Nullable, @NonNull, @NullMarked и @NullUnmarked — стали официальными, и, что немаловажно, обратная совместимость с ними будет гарантирована.

В новом переводе от команды Spring АйО мы подробнее рассмотрим, какие преимущества и новшества предлагает JSpecify 1.0.0, как это может повлиять на ваш проект и что нам предлагается для борьбы с NPEs.

📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/838044/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥52
🗓 Еженедельный дайджест №10

Для тех, кто был слишком занят на неделе или просто пропустил некоторые посты, публикуем дайджест!

Как использовать Lombok вместе с JPA – узнали, с какими подводными камнями можно столкнуться, используя Lombok вместе с JPA

Глубокое погружение в Sealed классы и интерфейсы – разобрались с нюансами использования и ключевыми особенностями sealed-классов и интерфейсов

#ВопросЭксперту: Есть ли в Spring Data JDBC поддержка SpEL? – вместе с Михаилом Поливахой выяснили, что из себя представляет поддержка SpEL в Spring Data JDBC

Spring АйО x Amplicode – анонсировали своё участие в самом жарком событии этой осени для Spring-разработчиков

JSpecify 1.0.0 и nullability в Javaузнали, какие аннотации вошли в первую версию библиотеки

😌 @spring_aio
Please open Telegram to view this post
VIEW IN TELEGRAM
👍125🔥4
Какой у вас уровень, как у разработчика 🔤
Anonymous Poll
7%
Студент
4%
Стажёр
12%
Junior
34%
Middle
26%
Senior
12%
Team Lead
4%
Я не разработчик
👍144🔥3
🗣 SpringOne 2024

Одно из крупнейших событий для Java и Spring разработчиков собрало ведущих экспертов, чтобы поделиться новыми практиками и инструментами.

Расписание докладов на 27 августа:
* Let's Explore Spring Security 6.4 – Rob Winch
* Building and Monetizing Generative AI Plugins with Spring AI – Denis Magda
* Build GraphQL Services with Spring Boot like Netflix – Paul Bakker
* Efficient Containers with Spring Boot 3, Java 21 and CDS – Sébastien Deleuze

Расписание докладов на 28 августа:
* Let's Generate Art with Kubernetes and Spring! – Tiffany Jernigan
* Scaling APIs with Spring Cloud – Luke Shannon, Spencer Gibb
* Bootiful Artificial Intelligence – Josh Long, Mark Pollack, Rod Johnson
* Learnings from Netflix to Effective Testing with Spring Boot – Paul Bakker
* Spring Modulith and I: An Apprenticeship in Team Building – Tim Sparg
* Micrometer Mastery: Unleash Advanced Observability in Your JVM Apps – Jonatan Ivanov

🔗 Зарегистрировать и смотреть онлайн можно на сайте мероприятия
Please open Telegram to view this post
VIEW IN TELEGRAM
👍157🔥5
📱 Виртуальные потоки Java 21 — чувак, где мой lock?

Как показывает опыт Netflix, использование виртуальных потоков, представленных в Java 21, может спровоцировать возникновение неожиданных проблем. В новом переводе от команды Spring АйО мы подробно исследуем уникальные трудности, возникшие у команды Netflix при интеграции виртуальных потоков с SpringBoot и Tomcat.

Давайте же посмотрим, как виртуальные потоки могут повлиять на производительность и стабильность системы.

📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/838912/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍188🔥8
🗂 Workspaces в IntelliJ IDEA

Команда Spring АйО продолжает следить за последними новинками в мире инструментов для разработчиков.

В нашем новом переводе вы узнаете о недавно появившемся плагине для IntelliJ IDEA, который предоставляет долгожданную многими функциональность!

📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/839228/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥52👎1
#SpringHero ⭐️ Juergen Hoeller

Предыдущий пост из серии Spring Hero был про основателя Spring Framework, а сегодня расскажем про сооснователя – Juergen Hoeller. С 2003 года он выполняет обязанности руководителя проекта и менеджера по релизам core фреймворка.

На данный момент Juergen Hoeller является контрибьютором в Spring Framework, который сделал больше всех коммитов – 7,809! На наш взгляд, только лишь этого факта уже достаточно, чтобы считать его настоящим Spring Hero!

Но Juergen не ограничивает себя только разработкой. Его довольно часто можно заметить на различных IT-конференциях: от нашего любимого JPoint и до всемирно известных Devoxx и Spring IO.

😌 @spring_aio
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥19👍113
🗓 Еженедельный дайджест №11

Для тех, кто был слишком занят на неделе или просто пропустил некоторые посты, публикуем дайджест!

Какой у вас уровень, как у разработчика? – провели опрос среди подписчиков. Участвуй, если ещё не успел!

SpringOne 2024 – поделились расписанием 2-го и 3-го дня самой масштабной конференции про Spring.

Виртуальные потоки Java 21 — чувак, где мой lock? – узнали, с какими проблемами можно столкнуться, если уже сейчас начать использовать виртуальные потоки в SpringBoot.

Workspaces в IntelliJ IDEA – рассказали про одну из самых ожидаемых фич для IntelliJ IDEA.

#SpringHero: Juergen Hoeller – рассказали про сооснователя и самого активного контрибьютора в Spring Framework.

😌 @spring_aio
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥41
🖥 Краткая история Java

Команда Spring АйО подготовила перевод статьи, посвящённой истории Java — одного из самых популярных языков программирования.

В статье вы найдёте не только краткую историю языка, но и его ключевые характеристики, которые сделали этот язык программирования таким востребованным.

📚 Читать на Хабр: https://habr.com/ru/companies/spring_aio/articles/840336/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍196🔥5
⚠️ Spring АйО x Amplicode

Эксперты сообщества Spring АйО уже в студии, на онлайн-митапе от команды Amplicode!

В мероприятии примут участие:
* Илья Сазонов
* Федор Сазонов
* Павел Кислов
* Рустам Курамшин
* Кирилл Толкачёв
* и другие!

Проверка оборудования уже завершена, а до начала прямого эфира осталось 5 минут – присоединяйтесь!

😄Трансляция в ВК
😉Трансляция на YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23🔥96👎2
🐫 Underscore в имени Spring Data JPA методов

Все мы знаем, что для именования методов в java принято использовать lowerCamelCase. Но при определенных обстоятельствах правила можно и даже нужно нарушать! Например, когда в игру вступают фреймворки. Один такой пример мы сегодня с вами рассмотрим.

Предположим, у нас есть модель питомец-владелец питомца (многие-к-одному). Чтобы повысить перформанс нашего приложения, нам пришлось немного декомпозировать модель, добавив атрибут в класс питомца, в котором будет храниться информация о владельце – ownerLastName.

Класс питомца:

@Getter
@Setter
@Entity
@Table(name = "pet")
public class Pet {
@Id
@Column(name = "id", nullable = false)
private Integer id;
@Column(name = "name")
private String name;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "owner_id")
private Owner owner;
@Column(name = "owner_last_name")
private String ownerLastName;
}


И класс владельца питомца:

@Getter
@Setter
@Entity
@Table(name = "owner")
public class Owner {
@Id
@Column(name = "id", nullable = false)
private Integer id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@OneToMany(mappedBy = "owner", orphanRemoval = true)
private Set<Pet> pets = new LinkedHashSet<>();
}


Используя Spring Data JPA и derived методы нужно учитывать следующий нюанс. Получение списка питомцев по имени их владельца с выборкой именно по столбцу из таблицы с владельцами, а не по полю ownerLastName будет выглядеть следующим образом:

public interface PetRepository extends JpaRepository<Pet, Integer> {
List<Pet> findByOwner_LastName(String lastName);
}


Здесь нам пришлось правила именования и определить метод с "_" перед атрибутом. В этом случае Hibernate сгенерирует следующий запрос:

select *
from pet
left join owner on id=pet.owner_id
where owner.last_name=?


А если же мы хотим получить значения из таблицы pet, а не из owner, то нужно объявить метод без нижнего подчеркивания:

public interface PetRepository extends JpaRepository<Pet, Integer> {
List<Pet> findByOwnerLastName(String lastName);
}


Тогда поиск будет осуществлен по колонке из таблицы pet:

select *
from pet
where pet.owner_last_name=?


Подробнее про именование Spring Data JPA методов можно прочитать в документации.

P.S. А знаете ли вы ещё примеры подобного слома шаблонов?

#SpringTips #JPA
🔥37👍164🤔3
🛡 Подборка лучших материалов по Spring Security

Рады представить – Павел Кислов, эксперт сообщества Spring АйО, известный по своим выступлениям на JPoint про Spring Security и работу с гео-данными. Сегодня Павел решил поделиться с нами материалами, которые он считает отличными для полноценного погружения в Spring Security!

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

1. Плейлист по актуальному Spring Security от Laur Spilca (english)
2. Плейлист по старому Spring Security от него же (english)
3. Статья про CSRF
4. Статья про XSS
5. Статья про XXE
6. Доклад Сергея Васильева про XXE на пальцах
7. Простецкая статья про то из чего состоит filter chain
8. Доклад Михаила Вовренчука про OpenID Connect и OAuth2.0
9. Хорошая памятка по JWT
10. Статья про JWT на стороне клиента
11. Воркшоп "Spring Security, demystified by Daniel Garnier Moiroux" (english)
12. Книга "Spring Security in Action" (english)
13. Доклад "Everything new in Spring Security 6 baked with a Spring Boot 3 recipe by Laur Spilca" (english)
14. Официальная документация по Spring Security (english)
15. Официальный репозиторий тестовых примеров Spring Security на GitHub


🔖 Сохраняйте, чтобы не потерять!
Please open Telegram to view this post
VIEW IN TELEGRAM
👍46🔥20101🤯1