Отключить ведение журнала только для указанного c вызова метода Spring Boot Repository - PullRequest
0 голосов
/ 02 августа 2020

Контекст: Я реализовал Spring Boot JpaRepostory, который хранит Entity со столбцом, имеющим уникальное ограничение. Наилучший способ, который я нашел, когда пользователь пытается записать уже существующую запись (совершенно нормальная и ожидаемая операция), - это поместить вызов репозитория в блок try/catch и проглотить исключение. Это действительно прекрасно работает. Однако ..

Проблема: Вызовы JpaRepository, которые нарушают уникальное ограничение, записывают массу предупреждений / ошибок, которые загромождают консоль. Этот сценарий является ожидаемым и обрабатывается, поэтому я не хочу, чтобы репозиторий регистрировал предупреждения / ошибки.

Вопрос: Как я могу отключить ведение журнала только для одного конкретного c метода call (repository.save)?

Сущность:

@Data
@Entity
public class Product {
    @Id @GeneratedValue
    private Long id;

    @Column(unique = true)
    private String name;

    public Product(String name) {
        this.name = name;
    }
}

Репозиторий:

public interface ProductRepository extends JpaRepository<Product, Long> { };

Служба:

@Service
public class ProductService {

    private final ProductRepository repository;

    public ProductService(ProductRepository repository) {
        this.repository = repository;
    }

    @Override
    public Sentence addProduct(String name) {
        try {
            // this call will throw an exception and log the error if a Product with name already exists
            // I'd like to disable the logging for this one call only
            repository.save(new Product(name));
        } catch (DataIntegrityViolationException ex) {
            // handle error here and swallow the exception
        }
    }

нежелательные журналы, созданные при звонке на repository.save (повторяются тысячи раз):

insert into product (name, id) values (?, ?) [23505-200]
2020-08-01 19:41:18.342  WARN 8320 --- [           main] o.h.engine.jdbc.spi.SqlExceptionHelper   : SQL Error: 23505, SQLState: 23505
2020-08-01 19:41:18.342 ERROR 8320 --- [           main] o.h.engine.jdbc.spi.SqlExceptionHelper   : Unique index or primary key violation: "PUBLIC.UK_Q48233U3FH44JLOTUJWMDQ967_INDEX_2 ON PUBLIC.PRODUCT(PRODUCT) VALUES 1674"; SQL statement:
...