Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有多个外部实体管理器的WebMvcAutoConfiguration_Java_Spring_Spring Mvc_Spring Boot_Spring Data Jpa - Fatal编程技术网

Java 具有多个外部实体管理器的WebMvcAutoConfiguration

Java 具有多个外部实体管理器的WebMvcAutoConfiguration,java,spring,spring-mvc,spring-boot,spring-data-jpa,Java,Spring,Spring Mvc,Spring Boot,Spring Data Jpa,我在将现有SpringWeb应用程序迁移到SpringBoot1.5.13的过程中遇到了一个问题。我已经处理了几乎所有的事情,但是我无法将好的持久性单元注入到WebMvcAutoConfiguration中。实际上,我有3个不同的实体管理器工厂,它们是从类路径导入的(由3个不同的内部库作为.xml文件提供,我无法更改它们)。它们中的每一个都以这种方式拆分: <sqe-db:jpa-emf database-definition-name="db-name" embedded-datasou

我在将现有SpringWeb应用程序迁移到SpringBoot1.5.13的过程中遇到了一个问题。我已经处理了几乎所有的事情,但是我无法将好的持久性单元注入到WebMvcAutoConfiguration中。实际上,我有3个不同的实体管理器工厂,它们是从类路径导入的(由3个不同的内部库作为.xml文件提供,我无法更改它们)。它们中的每一个都以这种方式拆分:

<sqe-db:jpa-emf database-definition-name="db-name" embedded-datasource="false"/>
此时,我的目标是使以下配置到位:

  • 让应用程序既可以作为SpringApplication运行,也可以作为WAR部署(我想我已经做得很好了)
  • 有办法为web应用程序使用Spring引导自动配置,即使类路径中有多个实体工厂
  • 将我自己的数据源用于“dev”概要文件,但将tomcat数据源留给其他环境
我的必备条件大致如下: -最小化对现有应用程序所需的更改 -继续使用库提供的.xml

一个简单的选择是重写配置,使用更现代的注释驱动配置,但我更喜欢使用现有的实现,这样在发布新库时就不必更改它

有没有办法在不接触现有xml文件的情况下声明@primarybean


任何想法,或不同的方法都是非常受欢迎的

经过一晚上的良好睡眠,我能够找到最简单的解决方案

我将其添加到我的配置类中:

@Autowired
@Qualifier("name-of-default-factory")
private EntityManagerFactory entityManagerFactory;

@Bean
@Primary
public EntityManagerFactory getEntityManagerFactory() {
    return entityManagerFactory;
}
现在它将正确地注入主bean

Method requestMappingHandlerMapping in org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$EnableWebMvcConfiguration required a single bean, but 3 were found:
    - jpa-lib1-name1: defined in null
    - jpa-lib1-name2: defined in null
    - jpa-lib1-name3: defined in null
@Autowired
@Qualifier("name-of-default-factory")
private EntityManagerFactory entityManagerFactory;

@Bean
@Primary
public EntityManagerFactory getEntityManagerFactory() {
    return entityManagerFactory;
}