【问题标题】:Configure Multiple Database on Spring-Boot with JPA and Hibernate Web Application使用 JPA 和 Hibernate Web 应用程序在 Spring-Boot 上配置多个数据库
【发布时间】:2018-03-15 12:42:05
【问题描述】:

我有一个使用 java 8 部署在 AWS HPC 上的 spring boot (1.5.4.RELEASE) 项目。此项目架构师适用于 Spring Web 应用程序(网站)Rest API 服务(移动开发人员)公司帐户管理。 所以有 3 个不同的数据库,比如(2-SQL Server 和 1-MySQL)。

在 stack-overflow 上,我发布了我的问题,希望在有才华的 stack-overflow 用户的帮助下找到实现此 Spring-Boot 项目的最佳方法。

这是我的配置属性文件。

application.properties

#For Public Website
spring.datasource.clone.web.driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.clone.web.url = jdbc:sqlserver://127.0.0.01\\dbo:1433;databaseName=PROD_WEB;
# Username and password
spring.datasource.web.username = web
spring.datasource.web.password = ED5FLW64ZU976Q36

#For Rest API
spring.datasource.clone.url = jdbc:mysql://localhost:3306/PROD_REST;
# Username and password
spring.datasource.clone.username = rest
spring.datasource.clone.password = Firewall77#


#For Account Administration for Company Users
spring.datasource.admin.url = jdbc:sqlserver://127.0.0.01\\dbo:1433;databaseName=PROD_ADMIN;
# Username and password
spring.datasource.admin.username = admin
spring.datasource.admin.password = Firewall77#

# Backup & Cron Policy
...

我将非常感谢一些非常好的建议来实施它。您对这个主题的了解会对我有所帮助,谢谢。

【问题讨论】:

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


    【解决方案1】:

    尝试使用Configuration for each data sources 指定的 DataSource 配置以获取更多帮助,请查看此Using multiple datasources with Spring Boot and Spring Data

    【讨论】:

    • 考虑添加两个来源的简短摘要,以防将来链接脱机。
    【解决方案2】:

    你需要实现两个不同的beans,每个数据源一个,并让它们分别取对应的配置属性:

    1. 第一个bean 将负责第一个datasource 配置,并应使用@Primary 将其声明为primary 数据源,因此可以将其设置为项目的主要数据源.
    2. 第二个bean 将配置第二个数据源。

    这就是它们应该在Spring中实现的方式:

    @Bean
    @Primary
    @ConfigurationProperties(prefix="spring.datasource.web")
    public DataSource primaryDataSource() {
        return DataSourceBuilder.create().build();
    }
    
    @Bean
    @ConfigurationProperties(prefix="spring.datasource.rest")
    public DataSource secondaryDataSource() {
        return DataSourceBuilder.create().build();
    }
    

    以下是您的application.properties 配置方式,以将这两个beans 配置考虑在内:

    #For Public Website
    spring.datasource.web.driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
    spring.datasource.web.url = jdbc:sqlserver://127.0.0.01\\dbo:1433;databaseName= PROD_WEB;
    # Username and password
    spring.datasource.web.username = web
    spring.datasource.web.password = ED5FLW64ZU976Q36
    
    #For Rest API
    spring.datasource.rest.driver = com.microsoft.sqlserver.jdbc.SQLServerDriver
    spring.datasource.rest.url = jdbc:mysql://localhost:3306/PROD_REST;
    # Username and password
    spring.datasource.rest.username = rest
    spring.datasource.rest.password = Firewall77#
    

    注意:

    我在这里更改了配置属性,以便区分 webrest 数据源:

    1. spring.datasource.web 开头的属性将专用于配置第一个数据源。
    2. spring.datasource.rest 开头的属性将专用于配置第二个数据源。

    【讨论】:

    • 感谢 @chsdk 的支持,但我担心用户流量(现在我们由 Beta 测试人员测试每秒创建 1000 到 1500 个请求,一些请求连接超时)如果我的数据库之一在最坏的情况下断开连接。我想向您确认,在您发帖时我已经以这种方式实施了,我们还将在这个项目中实施 AWS SQS。让我知道是否有其他方式可以提供最佳支持。
    • @SamDev 在我的情况下,我们正在使用此配置,它运行良好,我们使用它的方式应该只从一个数据源读取并更新两个数据库,因此当有更新或插入时它将被插入两个数据库中,但老实说,我没有遇到其中一个数据源断开连接的情况,但通常如果主数据库在那里,根据大量请求,它不会有问题,它这种配置不会有任何副作用。
    • 是的,但是一些请求被卡住并被测试工具抛出连接读取超时
    • @SamDev 我不知道,但据我所知,这是在 Spring 应用程序中配置两个数据源的最佳方式,请查看:Spring Boot Configure and Use Two DataSources answers on stackoverflow。
    猜你喜欢
    • 2018-06-02
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多