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

Java

Каналов в рубрике
2 093
Место этого канала
№ 221
Открыть рубрику →
Открыть в MAX

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

По реакциям

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

Загрузка…

Spring: граница транзакции должна охватывать бизнес-операцию целиком.

Например, перевод денег – это списание с одного счёта и зачисление на другой. Разместите оба действия в методе сервиса:
@Service
@RequiredArgsConstructor
public class TransferService {
    private final AccountRepository accounts;

    @Transactional
    public void transfer(Long fromId, Long toId,
                         BigDecimal amount) {
        var from = accounts.findById(fromId).orElseThrow();
        var to = accounts.findById(toId).orElseThrow();

        from.withdraw(amount);
        to.deposit(amount);
    }
}
Оба изменения фиксируются вместе. Если при зачислении возникнет исключение, вызывающее откат, списание тоже отменится.

Контроллеру остаётся проверить входные данные и вызвать сервис. Бизнес-правила находятся рядом с операцией, которую защищает транзакция.

Два нюанса:

- По умолчанию Spring откатывает транзакцию при `RuntimeException` и `Error`. Для checked exceptions можно настроить rollbackFor.
- В стандартном proxy-режиме вызов метода через `this` не активирует `@Transactional`.

Транзакция также не заменяет защиту от конкурентных изменений: для денежных операций отдельно продумайте блокировки или контроль версий.
Просмотры: 48
Перейти в пост Открыть в MAX Сообщить о неточности
Критическая уязвимость в Java: атака по сети без пароля и участия пользователя

Oracle опубликовала предупреждение CVE-2026-91403 с оценкой CVSS 9.1. Проблема находится в JSSE — компоненте Java, который обеспечивает защищённые соединения TLS.

По описанию Oracle, успешная атака может позволить читать, изменять и удалять данные, доступные уязвимому приложению. Для эксплуатации не нужны учётные данные, а сложность атаки оценена как низкая.

В списке затронутых версий:

- Java SE 8u511 / 8u511-perf, 11.0.33, 17.0.21, 21.0.13, 25.0.5 и 27.0.1.
- Oracle GraalVM for JDK 17.0.21 и 21.0.13.
- Oracle GraalVM Enterprise Edition 21.3.20.

Условия зависят от приложения: Oracle указывает на сценарии, где данные атакующего попадают в API уязвимого компонента, например через веб-сервис. Само наличие Java ещё не означает, что любой сервис можно атаковать.

Администраторам стоит проверить используемые сборки Java, включая runtime внутри контейнеров, и установить исправления по инструкции поставщика.

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

https://www.oracle.com/security-alerts/alert-cve-2026-91403.html
Просмотры: 169
Перейти в пост Открыть в MAX Сообщить о неточности
Java: почему месяц `5` может оказаться июнем

В Calendar месяцы нумеруются с нуля: январь 0, май 4, июнь 5. Простая ловушка, которая легко превращается в баг.

Начиная с Java 8, для нового кода выбирайте java.time:
LocalDate date = LocalDate.of(2026, 5, 31);
LocalDate deadline = date.plusDays(7);

String text = deadline.format(
    DateTimeFormatter.ISO_LOCAL_DATE
);
// 2026-06-07
Здесь 5 означает май, а plusDays() возвращает новый объект, сохраняя исходную дату. Основные типы java.time неизменяемы и безопасны для совместного использования потоками.

Помните: `LocalDateTime` не содержит часового пояса. Для однозначного момента события используйте Instant или задавайте пояс явно.
Просмотры: 184
Перейти в пост Открыть в MAX Сообщить о неточности
Spring Boot 4 убрал статус WILL_EXPIRE_SOON: проверьте мониторинг сертификатов

В Spring Boot 3 SSL-компонент health endpoint переходил в особый статус WILL_EXPIRE_SOON, если сертификат скоро истекал. Для проб Kubernetes и балансировщиков это было неудобно: непонятно, считать сервис живым или нет.

В Spring Boot 4 этот статус убрали. Health остаётся UP, а цепочки сертификатов, срок которых скоро закончится, перечисляются в details.expiringChains. Порог предупреждения задаётся свойством management.health.ssl.certificate-validity-warning-threshold:
management:
  health:
    ssl:
      certificate-validity-warning-threshold: 14d
  endpoint:
    health:
      show-details: always
Ответ /actuator/health тогда выглядит так:
{
  "status": "UP",
  "details": {
    "expiringChains": ["server-cert…"]
  }
}
Практический вывод простой: пробы больше не будут дёргаться из-за истекающего сертификата, но и алерт по смене статуса тоже не сработает. Если мониторинг ловил WILL_EXPIRE_SOON, переключите его на проверку непустого expiringChains и не забудьте включить show-details, иначе деталей в ответе не будет.
Просмотры: 215
Перейти в пост Открыть в MAX Сообщить о неточности
ВКонтакте Телеграм Одноклассники
Избранное в datool.ru

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

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

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

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

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

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

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

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

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

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

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

Перейти