spring-boot - 在一个 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 数据库可能有不同的方法。
请帮忙 !!!
解决方案
推荐阅读
- gcc - mediapipe 库无法在 High Sierra 上构建
- python - FFMPEG 输出视频播放开始于 10 秒
- multilabel-classification - 服装分类的预训练模型
- python - 如何在yolov3模型上进行多图批量推理?
- java - 如何让程序一直询问直到输入有效数字?
- flutter-web - 如何在子级不超过父容器的 maxWidth 的情况下使用颤动创建可滚动页面?
- kotlin - 如何实现原始类型的lateinit效果?
- javascript - Web Audio API 在同一流中添加语音和本地文件
- swift - Swift [weak self] 用于在嵌套闭包中在 main 上调度
- powerbi - 我有一个与 sql 数据库连接的 power bi 桌面,里面有一些报告