我的应用程序有多个数据源,所以我根据这个 URL 创建了两个数据源配置类。
但是在运行 spring boot 应用程序时出现错误
说明:com.cavion.services.UserDataService 中的字段 userDataRepo 需要一个名为“entityManagerFactory”的 bean,但找不到。操作:考虑在您的配置中定义一个名为“entityManagerFactory”的 bean。
从 StackOverflow 上的这个 问题 帮助我弄清楚了问题。我需要在我的 JPA 存储库上指定 entityManagerFactoryRef 。
但是我有很多存储库类,其中一些使用 Entitymanager ‘A’,一些使用 ‘B’。我当前的 spring boot 应用程序类是这样的
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class,
DataSourceTransactionManagerAutoConfiguration.class })
@EnableTransactionManagement
@EntityScan("com.info.entity")
@ComponentScan({"com.info.services","com.info.restcontroller"})
@EnableJpaRepositories("com.info.repositories")
public class CavionApplication {
public static void main(String[] args) {
SpringApplication.run(CavionApplication.class, args);
}
@Bean
public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
return args -> {
System.out.println("Let's inspect the beans provided by Spring Boot:");
String[] beanNames = ctx.getBeanDefinitionNames();
Arrays.sort(beanNames);
for (String beanName : beanNames) {
System.out.println(beanName);
}
};
}}
我已经在 spring boot 类上提供了 EnableJpaRepositories,那么如何配置多个 EnableJpaRepositories 以便我可以配置多个 entityManagerFactory?
请建议设置多个数据源的最佳方法。
原文由 Ansar Samad 发布,翻译遵循 CC BY-SA 4.0 许可协议
为了让 spring 知道什么
DataSource
与什么Repository
--- 相关,你应该在@EnableJpaRepositories
注释中定义它。假设我们有两个实体,Servers
实体和Domains
实体,每个实体都有自己的 Repo,然后每个 Repository 都有自己的 JpaDataSource 配置。1. 根据相关的数据源对所有存储库进行分组。例如
Domains
实体的存储库(包:org.springdemo.multiple.datasources.repository.domains
):Servers
实体的存储库(包:org.springdemo.multiple.datasources.repository.servers
)2.对于每个JPA Data Source你需要定义一个配置,在这个例子中我展示了如何配置两个不同的DataSources
Domains
Jpa 配置:数据源和存储库之间的关系在basePackages
值中定义,这就是为什么需要根据实体将存储库分组到不同包中的原因每个回购将使用的经理。Servers
Data Source Configuration: as you can see the basePackages value has the package name of theServers
Repository , and also the values ofentityManagerFactoryRef
andtransactionManagerRef
不同是为了让spring把每个entityManager分开。3.将一个数据源设置为主
为了避免错误消息:
Parameter 0 of constructor in org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration required a single bean, but 2 were found:
只需将其中一个数据源设置为@Primary,在本例中我选择Servers
数据源作为主要数据源:如果您需要更多信息,请参阅每个配置的完整示例:
Servers
JPA配置Domains
JPA配置为了分离每个数据源,我将配置放在
application.properties
文件中,如下所示:如果您需要更多信息,请参阅以下文档:
Spring 文档:howto-two-datasources
如何配置两个不同数据库的类似示例: github example