【问题标题】:Why the second database not created when multiple datasources in Springboot application?为什么Spring Boot应用程序中有多个数据源时没有创建第二个数据库?
【发布时间】:2021-07-17 00:47:54
【问题描述】:

我想在我的 Springboot 应用程序中使用两个 (Mysql) 数据库。按照说明我使用以下配置

app.properties

spring.datasource.url = jdbc:mysql://localhost:3306/db1?createDatabaseIfNotExist=true&autoReconnect=true
spring.datasource.username = root
spring.datasource.password = password

spring.seconddatasource.url = jdbc:mysql://localhost:3306/db2?createDatabaseIfNotExist=true&autoReconnect=true
spring.seconddatasource.username = root
spring.seconddatasource.password = password

DataSourceConfig.java

@Configuration
public class DataSourceConfig {
    @Bean("dataSource")
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource")
    public DataSource dataSource() {
        return DataSourceBuilder.create()
                .type(DriverManagerDataSource.class)
                .build();
    }

    @Bean("secondDataSource")
    @ConfigurationProperties(prefix = "spring.seconddatasource")
    public DataSource secondDataSource() {
        return DataSourceBuilder.create()
                .type(DriverManagerDataSource.class)
                .build();
       }
    }

应用程序启动时没有错误,但只创建了第一个数据库(或标记为主要的任何数据源 bean)。为什么不是第二个?

编辑:

一旦我手动创建了第二个数据库,应用程序就可以很好地连接到它们。导致问题的只是非主数据库的自动创建。

【问题讨论】:

    标签: mysql spring spring-boot datasource


    【解决方案1】:

    因为你用错了@ConfigurationProperties。注释最肯定将 bean 指向相关配置。创建第一个 DB 是因为,spring.datasource.* 实际上是标准 Spring Boot 属性。

    如果您希望创建两个数据源,至少您需要自己在第二个数据源上设置适当的属性(urlpassword)。当然,您可以使用 @Value 将自定义属性 (spring.seconddatasource.*) 注入到配置类中。

    【讨论】:

    • 问题是,一旦我手动创建了第二个数据库,我就可以使用两个数据库。所以配置有效,只是导致问题的非主数据库的自动创建。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-10
    • 2010-09-22
    • 2015-11-11
    • 2015-05-19
    • 2019-12-16
    • 2015-07-10
    相关资源
    最近更新 更多