У меня есть веб-приложение 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, вызывающей эту ошибку, и как ее исправить?




Не уверен, в чем разница за кулисами, но Autowired для EntityManagerFactory по-прежнему работает, но получение EntityManager с этой фабрики больше не по умолчанию. Добавление определения bean-компонента устраняет проблему следующим образом:
@Bean
public EntityManager getEntityManager() {
return emFactory.createEntityManager();
}
Относительно просто.