Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.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
Spring Boot,Spring数据JPA,具有多个Hikari数据源和单个数据源配置Java文件_Java_Spring_Spring Boot_Spring Data Jpa_Hikaricp - Fatal编程技术网

Spring Boot,Spring数据JPA,具有多个Hikari数据源和单个数据源配置Java文件

Spring Boot,Spring数据JPA,具有多个Hikari数据源和单个数据源配置Java文件,java,spring,spring-boot,spring-data-jpa,hikaricp,Java,Spring,Spring Boot,Spring Data Jpa,Hikaricp,如何使用application.properties中提到的多个数据源配置创建单个配置java文件,以便在添加任意数量的数据源时。它必须使用相同的配置文件自动处理所有数据源 此外,所有数据源都必须使用相同的JPARepository来查询数据。 此外,我还想创建一个实体管理器列表,以便在特定的数据源上执行特定的操作 应用程序属性 site1.url=jdbc:postgresql://localhost:4567/postgres site1.username=someUsername site

如何使用application.properties中提到的多个数据源配置创建单个配置java文件,以便在添加任意数量的数据源时。它必须使用相同的配置文件自动处理所有数据源

此外,所有数据源都必须使用相同的JPARepository来查询数据。 此外,我还想创建一个实体管理器列表,以便在特定的数据源上执行特定的操作

应用程序属性

site1.url=jdbc:postgresql://localhost:4567/postgres
site1.username=someUsername
site1.password=somePassword

site2.url=jdbc:postgresql://localhost:5433/postgres
site2.username=someUsername
site2.password=somePassword
SiteConfiguration.java

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
        entityManagerFactoryRef = "site1EntityManager",
        transactionManagerRef = "site1TransactionManager",
        basePackages = "com.someProject.repositoryInterface"
)
public class Site1Config extends HikariConfig {

    @Autowired
    private Environment environment;

    @Primary
    @Bean(name = "site1EntityManager")
    public HikariDataSource mysqlDataSource() {
        setJdbcUrl(environment.getProperty("site1.url"));
        setUsername(environment.getProperty("site1.username"));
        setPassword(environment.getProperty("site1.password"));

        return new HikariDataSource(this);
    }

    @Primary
    @Bean(name = "site1EntityManager")
    public LocalContainerEntityManagerFactoryBean mysqlEntityManagerFactory(EntityManagerFactoryBuilder builder) {
        return builder
                .dataSource(mysqlDataSource())
                .packages(ModelClass.class)
                .persistenceUnit("site1PU")
                .build();
    }

    @Primary
    @Bean(name = "site1TransactionManager")
    public PlatformTransactionManager mysqlTransactionManager(@Qualifier("site1EntityManager") EntityManagerFactory entityManagerFactory) {
        return new JpaTransactionManager(entityManagerFactory);
    }

}
这是单一数据源配置文件的基本示例。 我想以“site(Number)”的形式将SiteConfiguration作为泛型类,并为每个案例创建单独的数据源、实体管理器

它应该自动从application.properites获取数据源的数量,并配置属性文件中提到的所有数据源。


此外,每个数据源都必须使用相同的JPA存储。

据我所知,您需要创建“N”个数据源,具体数量取决于您在应用程序中声明的站点数量。properties。 我看到的唯一方法是,应该动态地创建数据源bean,而不是静态地绑定到application.properties

在Spring中,有一种方法是结合使用“ConfigurableBeanFactory”和“BeanFactoryAware”

StackOverflow中已经有了答案:


希望这有帮助

据我所知,您需要根据在应用程序中声明的站点数量创建“N”个数据源。属性。 我看到的唯一方法是,应该动态地创建数据源bean,而不是静态地绑定到application.properties

在Spring中,有一种方法是结合使用“ConfigurableBeanFactory”和“BeanFactoryAware”

StackOverflow中已经有了答案:


希望这有帮助

您的问题非常笼统。请说得更具体些。问题是什么?考虑到我有5个数据库,所有的数据库都有相同的模型,所以我需要通过提到JDBC URL、用户名和密码来配置HICALI数据源。所以,我想用一个java文件SiteConfiguration.java来配置它,其中5个数据库可以创建5个Hikari数据源。我不知道您是否已经这样做了,但您可以再次浏览这个链接,您的问题非常笼统。请说得更具体些。问题是什么?考虑到我有5个数据库,所有的数据库都有相同的模型,所以我需要通过提到JDBC URL、用户名和密码来配置HICALI数据源。所以,我想用一个java文件SiteConfiguration.java来配置它,其中5个数据库可以创建5个Hikari数据源。我不知道您是否已经这样做了,但您可以再次通过此链接,