java - 没有“org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder”类型的合格bean
问题描述
首先,这不是一个重复的问题。因为我已正确配置,请查看我的代码并告诉我这里出了什么问题。然后在这里我正在尝试 Spring Boot 多数据源配置。
我面临的错误:
Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'workerEntityManagerFactory' defined in class path resource [com/sample/engine/config/WorkerDBConfiguration.class]: Unsatisfied dependency expressed through method 'workerEntityManagerFactory' parameter 0; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:798)
at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:539)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1338)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1177)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:557)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517)
at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:202)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1108)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:868)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550)
at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.run(SpringBootServletInitializer.java:152)
at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.createRootApplicationContext(SpringBootServletInitializer.java:132)
at org.springframework.boot.web.servlet.support.SpringBootServletInitializer.onStartup(SpringBootServletInitializer.java:92)
at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:172)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5135)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
... 38 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1695)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1253)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1207)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:885)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:789)
我的配置类
主要数据配置:
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "customerApiEntityManagerFactory",
transactionManagerRef = "customerTransactionManager",
basePackages = {
"com.sample.engine.agent.customerdb.dao"
}
)
public class CustomerDBConfiguration {
@Value("${customer.datasource.jndi-name}")
private String customerDB;
@Bean(name = "customerDataSource")
@Primary
public DataSource customerDataSource() {
JndiDataSourceLookup dataSourceLookup = new JndiDataSourceLookup();
DataSource dataSource = dataSourceLookup.getDataSource(customerDB);
return dataSource;
}
@Primary
@Bean(name = "customerEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean customerEntityManagerFactory(EntityManagerFactoryBuilder builder
) {
return builder
.dataSource(customerDataSource())
.packages("com.sample.engine.agent.customer.model")
.persistenceUnit("db1")
.build();
}
@Primary
@Bean(name = "customerTransactionManager")
public PlatformTransactionManager customerTransactionManager(@Qualifier("customerEntityManagerFactory") EntityManagerFactory customerEntityManagerFactory) {
return new JpaTransactionManager(customerEntityManagerFactory);
}
}
辅助数据配置
@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
entityManagerFactoryRef = "workerEntityManagerFactory",
transactionManagerRef = "workerTransactionManager",
basePackages = {
"com.sample.engine.agent.worker.dao"
}
)
public class WorkerDBConfiguration {
@Value("${worker.datasource.jndi-name}")
private String workerDB;
@Bean(name = "workerDataSource")
public DataSource workerDataSource() {
JndiDataSourceLookup dataSourceLookup = new JndiDataSourceLookup();
DataSource dataSource = dataSourceLookup.getDataSource(workerDB);
return dataSource;
}
@Bean(name = "workerEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean
workerEntityManagerFactory(EntityManagerFactoryBuilder workerBuilder) {//, @Qualifier("workerDataSource") DataSource dataSource
return workerBuilder
.dataSource(ceapiDataSource())
.packages("com.sample.engine.agent.worker.model")
.persistenceUnit("db2")
.build();
}
@Bean(name = "workerTransactionManager")
public PlatformTransactionManager workerTransactionManager(@Qualifier("workerEntityManagerFactory") EntityManagerFactoryworkerEntityManagerFactory) {
return new JpaTransactionManager(workerEntityManagerFactory);
}
}
主班
@SpringBootApplication
@EnableMongoRepositories
@ComponentScan
@EnableAutoConfiguration(exclude = {HibernateJpaAutoConfiguration.class, JpaRepositoriesAutoConfiguration.class})
public class AgentManagerWeb extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(AgentManagerWeb.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(AgentManagerWeb.class);
}
}
应用程序属性
saasapi.datasource.jndi-name=java:comp/env/jdbc/saasapi
ceapi.datasource.jndi-name=java:comp/env/jdbc/ceapi
解决方案
推荐阅读
- visual-studio-code - 如何在 VS Code 中最大化拆分编辑器?
- cordova - 如何在 Ionic 3 中获取媒体音量?
- json - 使用 fetch 加载 json 而不是将 js 文件导入为配置
- swift - 下载firebase存储网址不起作用
- c - C - 读取文件并打印到文件后获取无效字符,-也许-缓冲区溢出
- html - 一个 autocomplete="off" 示例有效,我的代码 autocomplete="off" 没有?
- c# - 按连接度划分的图
- python - 使用 Pandas 读取嵌套 JSON 的 KeyError
- javascript - 使用 JavaScript 连接数组中的连续(相关)对象
- colors - 终端 emacs 内的曝光颜色