Почему AuditReader не может быть автоматически подключен к репозиторию

В моем springbootapp у меня есть следующий репозиторий: -

@Repository
public class RevisionRepository {

private AuditReader auditReader;

public RevisionRepository(AuditReader auditReader) {
    this.auditReader = auditReader;
  }
}

Когда я запускаю это приложение. Я получил эту ошибку: -

Ошибка запуска ApplicationContext. Чтобы отобразить отчет об условиях, повторно запустите приложение с включенной отладкой. 2020-12-24 21:09:15 -


ПРИЛОЖЕНИЕ НЕ ЗАПУЩЕНО


Описание:

Параметр 0 конструктора в com.howtodoinjava.demo.repository.RevisionRepository требует bean-компонента типа «org.hibernate.envers.AuditReader», который не может быть найден.

Действие:

Рассмотрите возможность определения bean-компонента типа org.hibernate.envers.AuditReader в вашей конфигурации.

Как я могу заставить это работать?

Поместите @Autowired в приватный AuditReader auditReader;

Alien 24.12.2020 20:27

Вы должны создать bean-компонент AuditReader вручную. Смотрите пример здесь

kmplzz 24.12.2020 20:58

@kmplzz спасибо за предложение. Это решило мою проблему.

masiboo 25.12.2020 13:23
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
775
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Это исправило мою проблему. Надеюсь, это будет полезно для других: -

@Configuration
public class RevisionConfiguration {

@Autowired
private AuditReader auditReader;

private final EntityManagerFactory entityManagerFactory;

public RevisionConfiguration(EntityManagerFactory entityManagerFactory) {
    this.entityManagerFactory = entityManagerFactory;
}

@Bean
AuditReader auditReader() {
    return AuditReaderFactory.get(entityManagerFactory.createEntityManager());
  }
}

см. мой ответ ниже stackoverflow.com/a/70012134/554117

Giulio Pulina 17.11.2021 23:57

Принятый ответ не сработал для меня, потому что через некоторое время приложение начинает выдавать java.net.SocketException из-за закрытия соединения.

Я решил проблему:

  1. Подключение EntityManager с использованием @PersistenceContext

  2. Каждый раз получать новый экземпляр AuditReader

    public class AuditRepository {
    
    @PersistenceContext
    private EntityManager entityManager;
    
    private AuditReader getAuditReader() {
        return AuditReaderFactory.get(entityManager);
    }
    
    public Optional<T> getRevision() {
        final AuditReader auditReader = getAuditReader();
        ...
    }
    

Другие вопросы по теме