有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何在Spring Boot JPA中连接到多个数据库?

我目前有一个数据库连接,它正在工作。我想连接另一个(最终还有两个)数据库。我该怎么做应该有一个只使用注释和属性文件的解决方案

我也读过这个问题,但是我不知道它是如何运作的,或者它是否适用。我没有使用控制器类,我不知道它做什么。我也不确定他们在回答中提到的配置类实际上是如何连接到特定DO的

这是我的申请表。属性文件:(标出用户名和密码,但它在我的文件中)

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;

共 (2) 个答案

  1. # 1 楼答案

    Spring Data了解到这是人们可能想要的一个常见用例,所以他们创建了一个关于如何实现这一点的示例项目。我将回顾multiple-datasources的spring数据示例

    重要的方面是在OrderConfig和CustomerConfig类定义这两个数据源时查看它们

  2. # 2 楼答案

    对于Hibernate,可以使用多个hbm。xml文件,然后在类中获取并使用它

    比如:

    if ("yourCondition".equals(definedCondition)) {
        sf = new Configuration().configure("example.cfg.xml").buildSessionFactory();
    } else {
        sf = new Configuration().configure("exampleTwo.cfg.xml").buildSessionFactory();
    }
    

    xml文件中可以有单独的数据库和登录信息

    如果需要两个单独的连接,可以将它们存储在单独的方法中,并调用它们来创建多个会话