ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

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

2019-10-26 21:20:58  阅读:324  来源: 互联网

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


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

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

我也读了How to use 2 or more databases with spring?这个问题,但我不知道它的工作方式是否太好/是否会适用.我没有使用控制器类,我不知道那是什么.我也不确定他们在答案中提到的config类实际上如何连接到特定的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添加一个TransactionManager和EntityManagerFactory bean定义.

如果您打算让每个数据源都参与JTA事务,则还需要考虑配置JTA事务管理器,而不是配置单个资源本地事务管理器.

标签:spring-boot,spring-data-jpa,hibernate,spring,java
来源: https://codeday.me/bug/20191026/1939279.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有