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 Boot приложения

Чтобы запустить Spring Boot приложение на любом свободном порту достаточно указать в application.properties/yaml файле server.port=0. В этом случае Spring Boot автоматически подберёт свободный порт, и постарается избежать конфликта с другими приложениями.

Но что если хочется выбрать свободный порт из определенного диапазона? В таком случае можно использовать выражение ${random.int(min,max)}. Например, для выбора порта в пределах от 8000 до 8100 свойство будет выглядеть так:

server.port=${random.int(8000,8100)}

За случайный выбор значений отвечает класс RandomValuePropertySource.

#SpringTips #Simple
3👍59🔥125😁3
🗓 Еженедельный дайджест №17

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

Spring АйО х Joker сообщили об участии команды Spring АйО в Joker 2024

Туториал по Spring Data Envers для начинающихразобрались, как отслеживать изменения данных в приложении, используя Spring Data Envers

Вышел Spring AI 1.0.0 M3сообщили о релизе Spring AI 1.0.0 M3, который содержит достаточно большое кол-во улучшений

Лучший способ создания нескольких окружений для Spring Boot приложенияананосировали статью про имеющиеся способы управления окружением с использованием Docker Compose в деталях

Рандомный порт для Spring Boot приложениярассказали, как можно зарандомить порт или выбрать порт рандомно из диапазона для Spring Boot приложения

😌 @spring_aio
Please open Telegram to view this post
VIEW IN TELEGRAM
👍16🔥43
Чем заняться в перерывах между докладами?

Познакомиться с коллегами по цеху и обсудить с ними актуальные вопросы из разных сфер: безопасности, паттернов проектирования, тестирования, управления данными и будущего технологий. Всё это можно сделать на Random coffee от Spring АйО.

Как проходит активность?

В 30-минутных перерывах между докладами приходите к столам возле Дискуссионки 3. На них будут лежать карточки с вопросами для обсуждения. За каждым столиком будет по два человека, которые обсудят вопрос, а спустя 5 минут поменяются «парами», чтобы подискутировать на новые темы. 

В одном раунде Random coffee участвуют 10 человек, включая эксперта. Полное расписание с темами и экспертами можно посмотреть по ссылке.
👍118🔥4
😀 Joker 2024 x День №1

Вот и прошел первый день главного события этой осени для Java разработчиков - Joker 2024!

💚 Дружественная атмосфера и куча крутых докладов, в том числе по нашей любимой теме - Spring Framework
🥰 Отлично проведённое время на Random Coffee с экспертами сообщества и его участниками
😡 Бесконечное количество интересных обсуждений на тему архитектуры приложений, безопасности приложений, тестирования и многого другого

⚠️ Кто не успел дойти сегодня – приходите завтра!

P.S. Увидимся на After Party!
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥32👍87
😀 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