Нет подходящего bean-компонента типа java.util.Set <javax.persistence.EntityManager> Spring Boot 2.0.2

У меня есть веб-приложение Spring Boot, использующее спящий режим, которое отлично работало на 1.5.7.RELEASE. Решил обновиться до 2.0.2.

Все, что мне нужно было сделать, чтобы его скомпилировать, - это изменить расположение SpringBootServletInitializer. Однако, когда я развертываю свой Tomcat, я получаю эту ошибку:

Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'jpaContext': Unsatisfied dependency expressed through constructor parameter 0; nested exception is
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'java.util.Set<javax.persistence.EntityManager>' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}

Нет никакой разницы в моих файлах свойств или другом коде. Я просто меняю свою весеннюю версию в своем POM и получаю сообщение об ошибке. Вот моя конфигурация подключений:

@Configuration
public class ConnectionsConfiguration implements ApplicationListener<ApplicationReadyEvent> {

static final Logger logger = LoggerFactory.getLogger(ConnectionsConfiguration.class);

@Autowired
DataSource dataSource;
@Autowired
private EntityManagerFactory emFactory;

@Bean
@Scope("prototype")
public LocalSessionFactoryBean sessionFactory() throws ClassNotFoundException {
    LocalSessionFactoryBean fact = new LocalSessionFactoryBean();
    fact.setAnnotatedPackages("com.****.persistence.model");
    fact.setPackagesToScan("com.****.persistence.model");
    fact.setDataSource(dataSource);
    return fact;
}

}

В чем разница между 1.5.7 и 2.0.2, вызывающей эту ошибку, и как ее исправить?

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

Ответы 1

Не уверен, в чем разница за кулисами, но Autowired для EntityManagerFactory по-прежнему работает, но получение EntityManager с этой фабрики больше не по умолчанию. Добавление определения bean-компонента устраняет проблему следующим образом:

@Bean
public EntityManager getEntityManager() {
    return emFactory.createEntityManager();
} 

Относительно просто.

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