spring - *.configuration.SecondaryDataSource 中方法 entityManagerFactory 的参数 0 需要找不到类型为“*.EntityManagerFactoryBuilder”的 bean
问题描述
我有 2 个数据库连接方案,一个使用 neo4j,一个使用 mariadb。因此编写了两个配置类来扫描存储库和域类,但在启动 Spring Boot 应用程序时出现以下错误。
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "barEntityManagerFactory",
transactionManagerRef = "barTransactionManager", basePackages = {"com.nkt.nsw.uiv.uam.foo.repo"})
@Profile("UAM")
public class PrimarydataSource {
@Autowired
private Environment env;
@Bean(name = "barDataSource")
@ConfigurationProperties(prefix = "bar.datasource")
public DataSource dataSource() {
// return DataSourceBuilder.create().build();
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setUrl(env.getProperty("bar.datasource.url"));
dataSource.setDriverClassName(env.getProperty("bar.datasource.driver-class-name"));
dataSource.setUsername(env.getProperty("bar.datasource.username"));
dataSource.setPassword(env.getProperty("bar.datasource.password"));
return dataSource;
}
@Bean(name = "barEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean barEntityManagerFactory(
EntityManagerFactoryBuilder builder, @Qualifier("barDataSource") DataSource dataSource) {
return builder.dataSource(dataSource).packages("com.nkt.nsw.uiv.uam.foo.domain")
.build();
}
@Bean(name = "barTransactionManager")
public PlatformTransactionManager barTransactionManager(
@Qualifier("barEntityManagerFactory") EntityManagerFactory barEntityManagerFactory) {
return new JpaTransactionManager(barEntityManagerFactory);
}
}
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "entityManagerFactory",
basePackages = {"com.nkt.nsw.uiv.uam.repository"})
@Profile("UAM")
public class SecondaryDataSource {
@Autowired
private Environment env;
@Primary
@Bean(name = "dataSource")
@ConfigurationProperties(prefix = "spring.data")
public DataSource dataSource() {
// return DataSourceBuilder.create().build();
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setUrl(env.getProperty("spring.data.neo4j.uri"));
// dataSource.setDriverClassName(env.getProperty("spring.datasource.driver-class-name"));
dataSource.setUsername(env.getProperty("spring.data.neo4j.username"));
dataSource.setPassword(env.getProperty("spring.data.neo4j.password"));
return dataSource;
}
@Primary
@Bean(name = "entityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
EntityManagerFactoryBuilder builder, @Qualifier("dataSource") DataSource dataSource) {
return builder.dataSource(dataSource).packages("com.nkt.nsw.uiv.uam.entities")
.build();
}
@Primary
@Bean(name = "transactionManager")
public PlatformTransactionManager transactionManager(
@Qualifier("entityManagerFactory") EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}
}
马文pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.nokia.nsw.uiv.uam</groupId>
<artifactId>uiv-uam</artifactId>
<version>19.9-SNAPSHOT</version>
<packaging>jar</packaging>
<name>uiv-uam</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath />
</parent>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<keycloak_version>6.0.0</keycloak_version>
</properties>
<dependencies>
<!-- <dependency> <groupId>com.nokia.nsw.uiv</groupId> <artifactId>uiv-core</artifactId>
<version>19.9-SNAPSHOT</version> </dependency> -->
<dependency>
<groupId>org.keycloak</groupId>
<artifactId>keycloak-authz-client</artifactId>
<version>${keycloak_version}</version>
<!-- <scope>provided</scope> -->
<!-- <exclusions> <exclusion> <groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId> </exclusion> </exclusions> -->
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.nokia.nsw.uiv.uam.core</groupId>
<artifactId>uiv-uam-core</artifactId>
<version>19.9-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jetty</artifactId>
</dependency>
<!-- <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-vault-config</artifactId>
<version>2.1.2.RELEASE</version> </dependency> -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-neo4j</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.neo4j</groupId>
<artifactId>neo4j-graphdb-api</artifactId>
<version>3.0.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.jaxrs</groupId>
<artifactId>jackson-jaxrs-json-provider</artifactId>
<version>2.9.9</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<!-- Import dependency management from Spring Boot -->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.1.6.RELEASE</version>
<type>pom</type>
<scope>import</scope>
<exclusions>
<!--<exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-neo4j</artifactId>
</exclusion> <exclusion> <groupId>org.neo4j</groupId> <artifactId>*</artifactId>
</exclusion> -->
<exclusion>
<groupId>io.leangen.graphql</groupId>
<artifactId>*</artifactId>
</exclusion>
<exclusion>
<groupId>com.graphql-java</groupId>
<artifactId>*</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
</dependencyManagement>
<!-- <parent> <groupId>com.nokia.nsw.uiv</groupId> <artifactId>uiv-parent</artifactId>
<version>19.9-SNAPSHOT</version> </parent> -->
<!-- <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> -->
</project>
{“类型”:“日志”,“主机”:“N-20HEPF0WQ1U5”,“级别”:“错误”,“neid”:“UIV-FRAMEWORK”,“系统”:“UIV”,“时间”:“ 2019-09-12T11:58:38.730Z", "timezone":"UTC", "log":"\r\n\r\n********************** ************\r\n应用程序启动失败\r\n*********************************\r \n\r\n说明:\r\n\r\ncom.nkt.nsw.uiv.uam.configuration.SecondaryDataSource 中方法 entityManagerFactory 的参数 0 需要 'org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder 类型的 bean ' 找不到。\r\n\r\n\r\n操作:\r\n\r\n考虑在您的配置中定义类型为 'org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder' 的 bean。 \r\n"}
spring.data.neo4j.uri=bolt://135.250.138.117:7687
spring.data.neo4j.username=neo4j
spring.data.neo4j.password=admin@123
spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration,org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration,io.leangen.graphql.spqr.spring.autoconfigure.SpqrAutoConfiguration,org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration
uam.aspect.enabled=false
uiv.kc.adminRealm=master
uiv.kc.adminUser=admin
uiv.kc.adminPassword=admin
uiv.kc.adminApp=uiv-app
uiv.kc.adminSecret=462fe347-d47f-4365-94ee-6aefff994ef2
uiv.kc.adminURL=https://135.250.138.48:8666/auth
bar.datasource.url=jdbc:mariadb://135.250.138.52:3306/METADATA
bar.datasource.username=METADATA
bar.datasource.password=METADATA
bar.datasource.driver-class-name=org.mariadb.jdbc.Driver
解决方案
Probably you have several configurations and in your @SpringBootApplication you have excluded DataSourceAutoConfigration.class like:
@SpringBootApplication(exclude = {DataSourceAutoConfigration.class})
It is adviced to do because otherwise you get multiple beans of type DataSorce,... on initialization. If that is the case, you can remove the exclusion from
@SpringBootApplication
and mark all the beans in one of your configurations as @Primary, like:
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "barEntityManagerFactory",
transactionManagerRef = "barTransactionManager", basePackages =
{"com.nkt.nsw.uiv.uam.foo.repo"})
@Profile("UAM")
public class PrimarydataSource {
@Primary
@Bean(name = "barDataSource")
...
@Primary
@Bean(name = "entityManagerFactory")
...
}
推荐阅读
- nginx - 自动索引的 NGINX 403 错误
- swift - Swift 中的扩展
- ios - 尝试编码符合 Codable 的类的子类时的 EXC_BAD_ACCESS
- f# - 如何在 F# 中按人口加权收入?
- spring-cloud-stream - 记录源应用程序错误通道的 Spring Sleuth Span Id
- ros - 将 .xacro 加载到 .xacro 中没有可见的效果
- python - HTTP 错误:403,带有美丽汤的 Python
- amazon-web-services - 在 AWS Lambda 上运行 Jest
- scripting - 如何将列中的值从 StarBasic 返回到 Calc
- c# - 打开 XML 格式不起作用