Spring АйО
8.43K subscribers
304 photos
209 videos
403 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 АйО х Joker 2024

Вот и подошел к концу Joker 2024! Были рады пообщаться и обменяться экспертизой со всеми, кто пришел 💚
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
31👍25🔥181
🛡 Безопасный Docker в продакшене

В новом переводе от команды Spring АйО вы узнаете, как минимизировать риски и обеспечить безопасность Docker-контейнеров с помощью CIS Benchmark рекомендаций и автоматизированных инструментов вроде Docker Bench for Security.

📚 Читать на Хабре: https://habr.com/ru/companies/spring_aio/articles/851604/
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍54👎1🤔1🤩1
🗑 Удаление дублирующихся строк

Со временем в любом приложении могут появиться дублирующиеся записи. Иногда их удаление реализуют на уровне приложения, хотя это можно сделать с помощью одного SQL-запроса.

Удалить дубликаты вручную не так просто, как может показаться. Обычно для этого используется команда GROUP BY с функциями MIN(id) или MAX(id), чтобы оставить одну строку.

⚠️ Будьте крайне аккуратны при выполнении DML-запросов. Во избежании потери данных рекоммендуем сделать backup таблицы, которую планируете изменить.


DELETE FROM contacts
WHERE id NOT IN (
SELECT MIN(id)
FROM contacts
GROUP BY firstname, lastname, email
);


Однако такой метод не всегда подходит, если есть дополнительные требования:
* Нужно сохранить не все дубликаты, а лишь часть, например, последние пять.
* Иногда важно не просто удалить первые или последние строки — дополнительные поля могут задавать приоритет, например, мы не хотим удалять пользователя, подтвердившего email, ради того, который этого не сделал.

Чтобы учесть все требования, можно воспользоваться оконными функциями:
1. Строки разбиваются на группы по дублирующимся полям, создавая отдельные группы для каждого уникального набора значений.
2. Каждая группа сортируется по важным полям, например, по дате создания.
3. Для каждой строки в группе с помощью функции ROW_NUMBER назначается порядковый номер.
4. Можно удалить любые строки с номером, превышающим необходимый, например, если нужно оставить только пять последних записей.

Тогда, запрос позволяющий сохранить не все дубликаты, а лишь часть, например, последние пять, будет выглядеть следующим образом:


WITH duplicates AS (
SELECT id, ROW_NUMBER() OVER(
PARTITION BY firstname, lastname, email
ORDER BY age DESC
) AS rownum
FROM contacts
)
DELETE FROM contacts
USING duplicates
WHERE contacts.id = duplicates.id AND duplicates.rownum > 5;


А запрос, для удаления дубликатов с учетом факта подтверждения email следующим образом:


WITH duplicates AS (
SELECT
id,
ROW_NUMBER() OVER(
PARTITION BY email
ORDER BY email_confirmed DESC
) AS rownum
FROM contacts
)
DELETE FROM contacts
USING duplicates
WHERE contacts.id = duplicates.id AND duplicates.rownum > 1;


#DatabaseTip #SQL
Please open Telegram to view this post
VIEW IN TELEGRAM
👍374🔥4🤩1
Компания JetBrains начала блокировать оплаченные лицензии пользователей, находящихся на территории РФ

Компания JetBrains начала блокировать лицензии пользователей, находящихся в России. Несмотря на то, что ранее была возможность обходить ограничения через изменение страны проживания и использование иностранных банковских карт, теперь лицензии могут быть заблокированы без предупреждения.

Вот что отвечает тех. поддержка JetBrains пользователям, чьи лицензии были заблокированы:

Наша команда по соблюдению правил выявила использование вашей лицензии на территории Российской Федерации, что нарушает условия нашей лицензии и действующие экспортные ограничения. К сожалению, я вынужден сообщить вам, что ваша лицензия была приостановлена в связи с нарушением лицензионного соглашения.

Официальная позиция нашей компании следующая: в соответствии с правилами ЕС, определённые продукты JetBrains, включая наши IDE, Code With Me, Upsource, TeamCity и Space для локального использования, относятся к категории продуктов массового рынка с функциями шифрования (X.D.III.201). Как следствие, экспорт таких продуктов, включая их передачу в Российскую Федерацию, запрещён. Кроме того, предоставление решений для управления проектами (таких как YouTrack), услуг по IT-консалтингу и технической поддержке также запрещено.

Напоминаем, что
JetBrains приостановила продажи в Российской Федерации и Беларуси в 2022 году. Вдобавок к этому, в соответствии с вышеуказанными правилами, JetBrains не может предоставлять прямую или косвенную поддержку ни одной организации или государственному органу в Российской Федерации, а также запрещена передача наших продуктов, использующих массовое шифрование или инструменты управления проектами, для использования в Российской Федерации без соответствующего разрешения на исключение из этих правил.


🔗 Источник: https://habr.com/ru/news/852254/

#breaking_news #ide #jetbrains #sber
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯61👎41👍752🔥2
⚡️ Как жить без IntelliJ IDEA? Часть №1. Собери сам!

На российском рынке сложилась сложная ситуация с IDE для Java-разработчиков. Новости, связанные с ограничением скачивания IntelliJ IDEA Ultimate, недоступностью JetBrains маркетплейса и блокировкой лицензий, которые использовались на территории РФ порождают огромное количество вопросов, на которые не у всех есть ответы.

Команда Spring АйО подготовила цикл статей, в которых постарается ответить на все вопросы, связанные с уходом IntelliJ IDEA из России.

📚 Читать на Хабре: https://habr.com/ru/companies/spring_aio/articles/852526/
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍36🔥94👎43🤔1
👩‍💻 JEP 467: Markdown в JavaDoc

С выходом Java 23 произошли важные изменения в формате написания комментариев — теперь они могут быть написаны с использованием Markdown. Ранее разработчики использовали HTML и JavaDoc-теги для оформления таких комментариев, что могло создавать сложности, особенно для тех, кто не знаком с HTML. Теперь, благодаря поддержке Markdown, комментарии станет писать проще и удобнее.

Зачем это нужно?

HTML с течением времени стал менее популярен для ручного написания. Сегодня чаще используют языки разметки, ориентированные на удобство разработчиков. Использование HTML для JavaDoc создавало трудности, так как он тяжеловесен и сложен для быстрого написания, особенно для новых разработчиков.

Преимущества использования Markdown

Markdown стал популярным благодаря своей простоте и удобочитаемости. Он идеально подходит для написания JavaDoc, которая обычно состоит из текстовых блоков, списков, ссылок и выделенного текста. Вместо сложных HTML-тегов можно использовать гораздо более лаконичные конструкции Markdown.

Вот так выглядит комментарий к методу hashCode с использованием HTML и JavaDoc-тегов:


/**
* Возвращает хэш-код для объекта.
* <p>
* Общий контракт метода {@code hashCode}:
* <ul>
* <li>Если метод вызывается несколько раз на одном объекте в ходе выполнения программы,
* он должен возвращать одно и то же значение, если данные объекта не изменялись.
* <li>Если два объекта равны, вызов метода {@code hashCode} должен вернуть одинаковое значение.
* <li>Если объекты не равны, метод может возвращать одинаковые хэш-коды, но этого следует избегать.
* </ul>
* @return хэш-код для объекта.
*/


Этот же комментарий в Markdown:


/// Возвращает хэш-код для объекта.
///
/// Общий контракт метода `hashCode`:
///
/// - Если метод вызывается несколько раз на одном объекте в ходе выполнения программы,
/// он должен возвращать одно и то же значение, если данные объекта не изменялись.
/// - Если два объекта равны, вызов метода `hashCode` должен вернуть одинаковое значение.
/// - Если объекты не равны, метод может возвращать одинаковые хэш-коды, но этого следует избегать.
///
/// @return хэш-код для объекта.


Для использования Markdown введён новый формат комментариев: строки начинаются с трёх слэшей (`///`), вместо традиционного синтаксиса /** ... */.

Основные различия:
- Пробел между абзацами обозначается пустой строкой, как и в Markdown.
- Списки создаются с помощью маркеров - вместо HTML-тегов <ul> и <li>.
- Подчёркивание (`_`) используется для выделения текста, вместо HTML-тегов <em>.
- Теги вроде {@code} заменяются обратными апострофами (\`...\`).

В то же время, важные теги, такие как @param и @return, сохраняются и могут использоваться вместе с Markdown-разметкой.

🔗 С полным описанием JEP можно ознакомиться по ссылке: https://openjdk.org/jeps/467

#Java #JEP
Please open Telegram to view this post
VIEW IN TELEGRAM
👍36🤔155🔥5👌1
🛠️ Функциональные HTTP-эндпоинты с Spring MVC/WebFlux и Kotlin

Функциональные подходы к разработке в Spring становятся все более популярными благодаря своей гибкости и лаконичности.

В новой статье от эксперта сообщества Spring АйО, Михаила Поливахи, рассматривается, как можно эффективно определять HTTP-эндпоинты с использованием Spring MVC/WebFlux, применяя функциональный стиль программирования на языке Kotlin.

📚 Читать на Хабре: https://habr.com/ru/companies/spring_aio/articles/853126/
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍195🔥5
🎤 Spring – эволюция или революция!?

В первом выпуске подкаста Spring АйО в студии собрались 4 эксперта сообщества, чтобы попытаться раз и навсегда ответить на вопрос: "Чем же для нас стал Spring: эволюцией или революцией?"

😉 СМОТРЕТЬ НА YOUTUBE
😄 СМОТРЕТЬ В VK ВИДЕО
🥰 СМОТРЕТЬ НА RUTUBE
💬 Аудио версию подкаста можно найти в комментариях

P.S. Поддержите нас лайками и репостами, если понравится формат и если вы бы хотели чаще слышать обсуждения экспертов сообщества на различные темы 💚
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍33🔥158🤩2
Продолжаем тему исследования популярности технологий в Spring приложениях. Какой технологией вы пользуетесь для реализации API в продакшене?
Anonymous Poll
84%
Spring Web
22%
Spring Reactive Web (WebFlux)
5%
Spring for GraphQL
6%
Spring Web Services (SOAP)
6%
Spring Cloud Function
13%
gRPC
3%
Jersey
4%
Свой вариант ответа. Напишу в комментариях
🔥14🤔9👍72
🗓 Еженедельный дайджест №18

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

Безопасный Docker в продакшенепознакомились со способами обеспечения безопасности Docker-контейнеров

Удаление дублирующихся строкразобрались с удалением дублирующихся строк одним SQL-запросом

Компания JetBrains начала блокировать оплаченные лицензии пользователей, находящихся на территории РФсообщили об ограничениях со стороны продуктов JetBrains в отношении пользователей из РФ, а также о возможных способах решения проблем, связанных с этими ограничениями

Как жить без IntelliJ IDEA? Часть №1. Собери сам!выпустили первую статью из цикла "Как жить без IntelliJ IDEA", в которой рассмотрели альтернативы полюбившейся многим IDE

JEP 467: Markdown в JavaDocрассказали про изменения формата написания комментариев JavaDoc в 23 версии Java

Функциональные HTTP-эндпоинты с Spring MVC/WebFlux и Kotlinпознакомились с эффективным способом определения HTTP-эндпоинтов, используя функциональный стиль программирования

Spring – эволюция или революция!?выпустили первый подкаст с участием экспертов сообщества Spring АйО

😌 @spring_aio
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥94