В моем 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 в вашей конфигурации.
Как я могу заставить это работать?
Вы должны создать bean-компонент AuditReader вручную. Смотрите пример здесь
@kmplzz спасибо за предложение. Это решило мою проблему.
Это исправило мою проблему. Надеюсь, это будет полезно для других: -
@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
Принятый ответ не сработал для меня, потому что через некоторое время приложение начинает выдавать java.net.SocketException из-за закрытия соединения.
Я решил проблему:
Подключение EntityManager с использованием @PersistenceContext
Каждый раз получать новый экземпляр AuditReader
public class AuditRepository {
@PersistenceContext
private EntityManager entityManager;
private AuditReader getAuditReader() {
return AuditReaderFactory.get(entityManager);
}
public Optional<T> getRevision() {
final AuditReader auditReader = getAuditReader();
...
}
Поместите @Autowired в приватный AuditReader auditReader;