首页 > 解决方案 > 在一个 spring 应用程序中连接多个 GCloud SQL DB 或 GCloud 和本地 DB

问题描述

我遇到了一种情况,我需要在一个 spring 应用程序中连接本地 MySQL DB 和 GCloud SQL DB。如果是 2 个本地数据库,那么我们可以使用在应用程序上手动设置的 2 个弹簧配置,一切都会正常工作,下面是此类配置的示例。

public class DBConfig {
@Primary
@Bean(name="primDatasource")
@ConfigurationProperties(prefix = "spring.admissions.datasource")
public DataSource dataSource(){
    return DataSourceBuilder.create().build();
}

@Primary
@Bean(name="primEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(
        EntityManagerFactoryBuilder builder,
        @Qualifier("primDatasource") DataSource dataSource
)
{
    Map<String, Object> properties = new HashMap<>();
    properties.put("hibernate.hbm2ddl.auto", "update");
    properties.put("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
    return builder
            .dataSource(dataSource)
            .properties(properties)
            .packages("com.kishore.multidb.outliers")
            .persistenceUnit("outl")
            .build();
}

@Primary
@Bean(name="transactionManager")
public PlatformTransactionManager transactionManager(
        @Qualifier("primEntityManagerFactory") EntityManagerFactory entityManagerFactory
)
{
    return new JpaTransactionManager(entityManagerFactory);
}
}

但是,这对我的云 sql 配置不起作用,下面是 application.yml

spring:
cloud-config:
cloud.gcp.sql.instance-connection-name: "cloud-sql-project-283416:us-central1:sql-test-one"
cloud.gcp.sql.database-name: "sql_db_one"

下面是一个示例 gcloud 配置文件:

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
        entityManagerFactoryRef = "cloudEntityManagerFactory"
)
public class CloudSQLConfig {

    @Primary
    @Bean(name="cloudDatasource")
    @ConfigurationProperties(prefix = "spring.cloud-config")
    public DataSource dataSource(){
        return DataSourceBuilder.create().build();
    }

    @Primary
    @Bean(name="cloudEntityManagerFactory")
    public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean(
            EntityManagerFactoryBuilder builder,
            @Qualifier("cloudDatasource") DataSource dataSource
    )
    {
        Map<String, Object> properties = new HashMap<>();
        properties.put("hibernate.hbm2ddl.auto", "update");
        properties.put("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");
        return builder
                .dataSource(dataSource)
                .properties(properties)
                .packages("com.kishore.multidb.outliers")
                .persistenceUnit("cloud-outl")
                .build();
    }

    @Primary
    @Bean(name="cloudTransactionManager")
    public PlatformTransactionManager transactionManager(
            @Qualifier("cloudEntityManagerFactory") EntityManagerFactory entityManagerFactory
    )
    {
        return new JpaTransactionManager(entityManagerFactory);
    }
}

这些是我为 gcloud sql 添加的依赖项。

<dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-gcp-starter</artifactId>
        <version>1.0.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-gcp-starter-sql-mysql</artifactId>
        <version>1.0.0.RELEASE</version>
    </dependency>

我不确定我这样做是否正确。在春季手动配置云 sql 数据库可能有不同的方法。

请帮忙 !!!

标签: spring-boothibernategcloudgoogle-cloud-sql

解决方案


推荐阅读