Spring Boot JPA: 如何连接多个数据库?

3
我目前已经连接了一个数据库并且它正常工作。我想要连接另外一个(最终还有两个)数据库。我该怎么做呢?应该有一种只使用注解和属性文件的解决方案。
我阅读了这篇文章《特定配置属性》,它对我的帮助有限,因为我仍然不知道如何在运行时从一个配置文件切换到另一个。我猜在尝试从不同的数据库检索/持久化之前,我需要一次只连接一个配置文件。
我也阅读了这个问题:《如何在Spring中使用两个或更多个数据库》,但是我不太清楚它是如何工作的/是否适用于我。我没有使用控制器类,也不知道它是做什么的。我也不确定他们在答案中提到的配置类实际上是如何连接到特定的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;
1个回答

4
您需要定义多个DataSource bean,每个bean代表您计划使用的各种数据库连接资源。然后,您需要为每个DataSource bean添加一个TransactionManagerEntityManagerFactory bean定义。
如果您打算让每个DataSource参与JTA事务,则还需要考虑配置JTA事务管理器,而不是单独的本地资源事务管理器。

这里还有一个示例项目 - Stephane Nicoll

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接