Java Portal | Программирование
12.8K subscribers
1.22K photos
103 videos
37 files
1.17K links
Присоединяйтесь к нашему каналу и погрузитесь в мир для Java-разработчика

Связь: @devmangx

РКН: https://clck.ru/3H4WUg
Download Telegram
Как и зачем писать свой DatabaseDialect для Kafka JDBC Sink

Я активно использую на проекте Kafka Connect Framework и в частности Kafka JDBC Sink Connector для быстрого сохранения данных из Kafka Topic в БД PostgresSQL. Для большинства задач достаточно написать простую JSON-конфигурацию и все стабильно и быстро работает из коробки. Нет необходимости в написании собственного кода. Однако в нетиповых ситуациях расширяемость Kafka Connect тоже помогает - можно переопределить и написать один из компонентов.

В конфигурации JDBC Sink Connector Task существует настройка dialect.name, которая отвечает за выбор диалекта для работы с конкретной БД. Как правило, в 99% случаев используется один из уже реализованных для популярных БД диалектов, как например в моем случае PostgresSqlDatabaseDialect для PostgreSQL.

Может показаться, что вряд ли кому-то понадобится реализовывать свой диалект, если только не имеем дело с какой-то специфичной непопулярной БД. Однако на практике оказалось, что реализация своего диалекта даже для PostgreSQL может быть полезна для решения некоторых возникающих прикладных задач.


В данной статье автор хочет показать идеи того, как реализация своего DatabaseDialect может помочь при имплементации нестандартных сценариев для вполне себе популярной БД Postgres, для которой существует PostgresSqlDatabaseDialect.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Spring Boot: ты можешь валидировать входные DTO через @Valid плюс аннотации вроде @NotBlank, @Email и т.д.

public class RegistrationRequest {

@Email(message = "Please provide a valid email address")
@NotBlank(message = "Email is required")
private String email;

@Size(min = 8, max = 16, message = "Password must be 8–16 characters long")
private String password;

@Pattern(
regexp = "^[0-9]{10,15}$",
message = "Phone number must be 10–15 digits"
)
private String phone;

// getters & setters
}


By Default, if the validation fails Spring automatically returns a 400 Bad Request with a detailed error body like:


{
"timestamp": "2025-01-01T12:00:00Z",
"status": 400,
"errors": [
"Email is required",
"Age must be at least 18"
]
}


You can customize the response by implementing a global exception handler


👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍63
Аннотации Spring Boot, которые нужно знать

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
18🔥3
Java-совет: начиная с Java 11, лучше использовать String.strip() вместо trim(), потому что он корректно обрабатывает Unicode-пробелы.

Поскольку trim() не обрабатывает некоторые типы пробельных символов, определённых в Unicode, он может оставлять неожиданные символы.

String.strip() использует Character.isWhitespace(int codePoint) для определения пробелов. Этот метод следует полному стандарту Unicode для пробельных символов, а не только ASCII, и удаляет все виды пробелов.

Пример:

String text = "\u2003Hello World\u2003";
System.out.println("trim(): [" + text.trim() + "]");
System.out.println("strip(): [" + text.strip() + "]");


Смысл сохранён полностью: trim() ограничен ASCII, strip() работает по Unicode-правилам и ведёт себя ожидаемо.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8
Недавно открыл для себя learn.java — официальный сайт от Oracle для изучения Java. Здесь всё чётко и по делу 😈

> Установка JDK и настройка IDE
> Пошаговые уроки по основам Java
> Практические задания в онлайн-редакторе
> Мини-проекты для закрепления знаний
> Дополнительные ресурсы для углубленного обучения

Плюс — есть Java Playground, где можно писать и запускать код прямо в браузере, без лишних установок

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥103
Spring Boot: аккуратно задавайте границы @ComponentScan, чтобы случайно не сканировать целые пакеты целиком.

👉 Java Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍61