Новое Распределяем каналы MAX по категориям и территориям. Читать новость
Открытый канал ID 68536775128494

Java библиотека

Книги, статьи, мемы и многое другое для Java программиста!

По сотрудничеству и рекламе: https://t.me/NadikaKir или в ЛС сообщества ВК https://vk.com/javatutorial

Канал в перечне РКН: https://vk.cc/cJrT4A

Мы на бирже: https://telega.in/c/javalib/

Сообщество VK https://vk.com/javatutorial

Открыть в MAX

Публикации за период

По реакциям

Поиск и вся лента — после бесплатной регистрации. Свои даты — по подписке; владелец канала видит их бесплатно. Сортировка по реакциям — по подписке. Зарегистрироваться

Загрузка…

CSV: запятая внутри значения меняет правила

Простое String.join(",", values) не подходит, если поля содержат кавычки, запятые или переносы строк. Один возможный способ экранирования:
static String csv(String value) {
    if (value.contains(",") || value.contains("\"")
            || value.contains("\n") || value.contains("\r")) {
        return "\"" + value.replace("\"", "\"\"") + "\"";
    }
    return value;
}

Здесь null не допускается: способ записи отсутствующего значения нужно определить отдельно. Для обмена с другими программами согласуйте кодировку, разделитель и окончания строк.

Если CSV откроют в таблице, отдельно учитывайте формулы: обычное CSV-экранирование не защищает от интерпретации значений вроде =... как формул.

#Java

Java Библиотека | Мы в Телеграм
Просмотры: 121
Перейти в пост Открыть в MAX Сообщить о неточности
Остановка задачи: interrupt требует сотрудничества

interrupt() не убивает поток. Он сообщает задаче о запросе отмены. Код должен проверять этот сигнал или корректно выходить из прерываемой операции.

Для рабочего цикла с ожиданием:
try {
    while (!Thread.currentThread().isInterrupted()) {
        doWork();
        Thread.sleep(500);
    }
} catch (InterruptedException e) {
    Thread.currentThread().interrupt();
    // выходим из задачи
}

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

Thread.stop() не используйте: в Java 25 этот метод ещё объявлен, но всегда выбрасывает UnsupportedOperationException.

#Java

Java Библиотека | Мы в Телеграм
Просмотры: 155
Перейти в пост Открыть в MAX Сообщить о неточности
requireNonNull — явная проверка, а не магия типов

Objects.requireNonNull проверяет ссылку во время выполнения и бросает NullPointerException с заданным сообщением:
this.repository = Objects.requireNonNull(
    repository, "repository"
);

Метод существует с Java 7. Он не делает типы Java автоматически null-безопасными и не проверяет поля объекта рекурсивно.

@NotNull и @Nullable описывают контракт для анализатора или фреймворка. Чтобы получить проверку на входе HTTP-метода через Bean Validation, нужна соответствующая интеграция.

Lombok @NonNull может сгенерировать проверку при обработке аннотаций — это другой механизм. Выбирайте его осознанно, а не как свойство JVM.

#Java

Java Библиотека | Мы в Телеграм
Просмотры: 184
Перейти в пост Открыть в MAX Сообщить о неточности
👩‍💻 Что ломается при переходе на Spring Boot 4

После обновления проект может успешно компилироваться и проходить тесты, а затем упасть уже при запуске.

Авторы разбирают реальные проблемы миграции: Jackson 2/3, старые коннекторы, Feign, Security 7, JUnit 6 и изменившиеся автоконфигурации.

⛓ Читать статью



Java Библиотека | Мы в Телеграм
Просмотры: 181
Перейти в пост Открыть в MAX Сообщить о неточности
🗄 Вебинар: JDBC: как Java-приложения взаимодействуют с базами данных
JDBC позволяет Java-приложениям работать с базами данных. Разберём подключение, SQL-запросы, транзакции и обработку ошибок.

💬 О чём поговорим
- Как подключиться к СУБД с помощью DriverManager и работать с Connection.
- Как выполнять SQL-запросы через Statement и PreparedStatement и получать результаты через ResultSet.
- Как управлять транзакциями: autocommit, commit и rollback.
- Как использовать SQLException, чтобы разобраться в причинах ошибки при выполнении запроса.

🎯 Результат урока:
- Вы разберётесь, как подключать Java-приложение к СУБД, выполнять SQL-запросы и работать с результатами.
- Узнаете, как управлять транзакциями и обрабатывать ошибки при обращении к базе данных.

👉 Для участия зарегистрируйтесь: https://vk.cc/d3hffx

Вебинар проходит в рамках старта курса «Java-разработчик», который помогает освоить современную Java-разработку: от основ и первых программ до серверных приложений, баз данных, Spring, контейнеров и очередей сообщений. Программа регулярно обновляется под требования рынка. 🚀

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru

Рекламный пост

Просмотры: 176
Перейти в пост Открыть в MAX Сообщить о неточности
ETag: ответ 304 работает только вместе с кешем

Клиент сохраняет тело успешного ответа и его ETag. При следующем запросе он может передать метку в If-None-Match.

• 304 — ресурс не изменился; используйте уже сохранённое тело. Нового тела в таком ответе нет.
• 200 — сохраните новое тело и новую метку. Если ETag отсутствует, старую метку нужно сбросить.
• Другие статусы обрабатываются отдельно; это не успешное обновление кеша.

Отправлять If-None-Match имеет смысл, когда есть и метка, и соответствующее тело. Храните их согласованно.

Для полноценного HTTP-кеша также важны Cache-Control, Vary и ключ кеша. Один ETag не реализует все правила кеширования.

#Java

Java Библиотека | Мы в Телеграм
Просмотры: 193
Перейти в пост Открыть в MAX Сообщить о неточности
Spring Boot: проверяйте конфигурацию при запуске

Разрозненные @Value сложнее сопровождать, чем связанный объект настроек. @ConfigurationProperties объединяет параметры, а @Validated с Bean Validation позволяет проверить ограничения.

Например, для внешнего сервиса можно потребовать непустой адрес и положительный timeout. При некорректном значении лучше получить понятную ошибку запуска, чем отказ первого пользовательского запроса.

Не забудьте зарегистрировать класс свойств через сканирование или @EnableConfigurationProperties и подключить провайдер валидации.

Пароли и ключи не следует коммитить в application.yml. Источник секрета, приоритет настроек и способ ротации нужно определить отдельно.

#Java

Java Библиотека | Мы в Телеграм
Просмотры: 231
Перейти в пост Открыть в MAX Сообщить о неточности
Цикл, forEach и Stream: выбирайте по задаче

Обычный цикл for-each остаётся хорошим вариантом для последовательной обработки, особенно если нужны break, continue или несколько действий с понятной обработкой ошибок.

collection.forEach(action) удобен для короткого действия. Stream полезен, когда задача действительно состоит из преобразований и фильтрации:
var names = users.stream()
    .filter(Objects::nonNull)
    .map(User::getName)
    .toList();

Stream.toList() доступен с Java 16 и возвращает неизменяемый список. Если результат надо менять, выберите подходящий коллектор.

При обходе обычной изменяемой коллекции не меняйте её структуру через другой путь. Для удаления могут подходить Iterator.remove() или removeIf(). Современный API сам по себе не гарантирует ускорение.

#Java

Java Библиотека | Мы в Телеграм
Просмотры: 249
Перейти в пост Открыть в MAX Сообщить о неточности
Spring Data: примеры под конкретный сценарий

В spring-data-examples собраны проекты для разных модулей Spring Data. Это удобнее, чем переносить случайный фрагмент из статьи без окружения.

Начните с нужного каталога: JPA, JDBC, MongoDB, Redis или другого модуля. Посмотрите не только репозиторий, но и конфигурацию, зависимости и проверки примера.

Версии библиотек, требования к БД и способ запуска уточняйте в README конкретного проекта. Пример из ветки разработки не обязательно соответствует версии в вашем приложении.

Официальный репозиторий Spring Data Examples.

#Java

Java Библиотека | Мы в Телеграм
Просмотры: 244
Перейти в пост Открыть в MAX Сообщить о неточности
Properties: значения по умолчанию задаются конструктором

Метода defaults(Properties) у Properties нет. Для резервных значений используйте конструктор:
var defaults = new Properties();
defaults.setProperty("port", "8080");
var config = new Properties(defaults);
System.out.println(config.getProperty("port")); // 8080

setProperty и getProperty предназначены для строковых ключей и значений. Хотя унаследованный put принимает Object, смешивать через него типы обычно не стоит.

При чтении файла учитывайте кодировку: load(InputStream) использует правила ISO-8859-1 и Unicode escapes. Для UTF-8 передайте Reader с явно выбранной кодировкой.

#Java

Java Библиотека | Мы в Телеграм
Просмотры: 241
Перейти в пост Открыть в MAX Сообщить о неточности
Вся лента — после бесплатной регистрации
ВКонтакте Телеграм Одноклассники
Избранное в datool.ru

Следите за каналом в личном кабинете

Зарегистрируйтесь в datool.ru, чтобы добавить канал «Java библиотека» в избранное и отслеживать его показатели.

Зарегистрироваться
Для владельцев каналов

Подтвердите свой канал

Войдите или зарегистрируйтесь в datool.ru, затем добавьте нашего бота в канал по инструкции в личном кабинете. После проверки владения замок исчезнет и вам станет доступно управление каналом.

Войти или зарегистрироваться

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти