java - Spring 启动 JPA : How do I connect multiple databases?

标签 java spring hibernate spring-boot spring-data-jpa

我目前连接了一个数据库并且正在运行。我想连接另一个(最终还有 2 个)数据库。我该怎么做?应该有一个仅使用注释和属性文件的解决方案。

我读过这个 Profile Specific Properties 它有点帮助,但我仍然不知道如何在运行时在代码中从一个配置文件切换到另一个配置文件。我假设我需要一次连接到一个配置文件,然后再尝试从不同的数据库中检索/保存内容。

我也看了这个问题,How to use 2 or more databases with spring? ,但我不知道它如何运作得很好/它是否适用。我没有使用 Controller 类,我不知道它的作用。我也不确定他们在答案中提到的配置类实际上如何连接到特定的 DO。

这是我的 application.properties 文件:(标出用户名和密码,但它在我的文件中)

hibernate.dialect=org.hibernate.dialect.SQLServer2012Dialect
hibernate.show_sql=true
hibernate.format_sql=true
hibernate.default_schema=dbo
hibernate.packagesToScan=src.repositories.LMClientRepository.java

spring.jpa.generate-ddl=true
spring.jpa.hibernate.naming-strategy=org.hibernate.cfg.DefaultNamingStrategy
spring.datasource.username=***
spring.datasource.password=***
spring.datasource.url=jdbc:sqlserver://schqvsqlaod:1433;database=dbMOBClientTemp;integratedSecurity=false;
spring.datasource.testOnBorrow=true
spring.datasource.validationQuery=SELECT 1
spring.jpa.database=dbMOBClientTemp
spring.jpa.show-sql=true
spring.jpa.hibernate.dialect=org.hibernate.dialect.SQLServer2012Dialect
spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerDriver

这是我的申请文件:

package testApplication;

import java.util.ArrayList;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.orm.jpa.EntityScan;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

import fileRetrieval.InputFileParse;
import lmDataObjects.LMClientDO;
import lmDataObjects.LoadMethodDO;
import repositories.LMClientRepository;
import repositories.LoadMethodRepository;

@SpringBootApplication
@EnableJpaRepositories(basePackageClasses = LoadMethodRepository.class)
@EntityScan(basePackageClasses = LoadMethodDO.class)
@EnableCaching
public class Application {

    private static final Logger log = LoggerFactory.getLogger(Application.class);

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

    @Bean
    public CommandLineRunner demo(LoadMethodRepository lm_repo, LMClientRepository lmc_repo) {
        return (args) -> {
            List<LMClientDO> lmlist = InputFileParse.getMultiGroupfile();

            List<String> uniqueMediaIds = new ArrayList(InputFileParse.getUniqueMediaIds());

            for (int i = 0; i < InputFileParse.getUniqueMediaIds().size(); i ++){
                lm_repo.save(new LoadMethodDO(uniqueMediaIds.get(i)));
            }

            for (int i = 0; i < lmlist.size(); i++){
                lmc_repo.save(new LMClientDO(lmlist.get(i).getClientId(), lmlist.get(i).getMediaId()));
            }
            //Here is where I would like to do stuff with data from the other database that I have not connected yet

        };
    }
}

我还创建了一个名为 application-MTS.properties 的新属性文件,并将新数据库的数据放入其中。仍然不确定如何处理它。

spring.datasource.username=***
spring.datasource.password=***
spring.datasource.url=jdbc:sqlserver://SCHQVSQLCON2\VSPD:1433;database=dbMTS;integratedSecurity=false;

最佳答案

您需要定义多个 DataSource bean,每个 bean 代表您计划使用的各种数据库连接资源。

然后您需要为每个 DataSource bean 添加一个 TransactionManagerEntityManagerFactory bean 定义。

如果您打算让每个 DataSource 参与一个 JTA 事务,您还需要考虑配置一个 JTA 事务管理器而不是单独的资源本地事务管理器。

关于java - Spring 启动 JPA : How do I connect multiple databases?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38793645/

相关文章:

java - 来自子对象字段聚合的自定义 Hibernate POJO 字段

java - BoxLayout 粘在顶部

java - Byte Buddy 和 ClassLoadingStrategy.UsingLookup

spring - java.lang.UnsupportedOperationException : The user must supply a JDBC connection

java - 如何设置 Spring 应用程序的日志文件名并记录到 tomcat/logs 文件夹?

java - SpringBoot 2从1.5迁移依赖错误

java - Jackson中的多态反序列化没有注释

java - 简单的 Java 二维数组迷宫示例

java - 找到对集合 org.hibernate.HibernateException 的共享引用

java - 随机 ID 生成器,映射与同列