如何在单个Boot应用中配置多数据库

如何在单个Boot应用中配置多数据库,第1张

为什么需要多数据

默认情况下,Spring Boot使用的是单数据库配置(通过springdatasource配置具体数据库连接信息)。

对于绝大多数Spring Boot应用,这是符合其使用场景的,因为Spring Boot提倡的是微服务理念,每个应用对应一个单独的业务领域。但在某些特殊情况下,一个应用对应多个数据库又是无法避免的,例如实施数据库分库后原本单个数据库变为多个数据库。本文就结合实际代码介绍如何在单个Boot应用中配置多数据库,以及与之相关的Druid,jOOQ,Flyway等数据服务框架的配置改造。

配置示例

DB1,DB2: 两个示例数据库

ServiceA, ServiceB: 分别使用DB1和DB2的服务类

连接池Druid

Druid是阿里巴巴开源的数据库连接池,提供了强大的监控支持,号称Java语言中最好的连接池。

创建两个配置类分别注册对应DB1和DB2的DataSource Bean和TransactionManager Bean。以DB1为例:

Tip: 可以把其中一个配置类中注册的DataSource Bean和DataSourceTransactionManager Bean加上@Primary注解,作为默认装配实例

// DB1

@Configuration

public class Db1Config {

@Bean(initMethod = "init", destroyMethod = "close")

@ConfigurationProperties(prefix = "dbdb1")

public DataSource dataSource1() {

return new DruidDataSource();

}

@Bean

public DataSourceTransactionManager transactionManager1() {

DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();

transactionManagersetDataSource(dataSource1());

return transactionManager;

}

}

applicationconf中的配置:

# DB1

dbdb1url=jdbc:mysql://127001:3306/db1useUnicode=true&characterEncoding=UTF-8&rewriteBatchedStatements=true

dbdb1username=root

dbdb1password=

ORM框架jOOQ

jOOQ是一个开源ORM框架,最大特点是提供类型安全的流式API,支持代码生成。

参照Boot自带的JooqAutoConfiguration,不难写出如下配置类:

@Configuration

public class JooqConfig {

// DB1

@Bean

public DataSourceConnectionProvider dataSourceConnectionProvider1(

@Qualifier("dataSource1") DataSource dataSource1) {

return new DataSourceConnectionProvider(

new TransactionAwareDataSourceProxy(dataSource1));

}

@Bean

public SpringTransactionProvider transactionProvider1(

@Qualifier("transactionManager1") DataSourceTransactionManager txManager1) {

return new SpringTransactionProvider(txManager1);

}

// DB2

//

@Configuration

public static class DslContextConfig {

@Autowired(required = false)

private RecordMapperProvider recordMapperProvider;

@Autowired(required = false)

private Settings settings;

@Autowired(required = false)

private RecordListenerProvider[] recordListenerProviders;

@Autowired

private ExecuteListenerProvider[] executeListenerProviders;

@Autowired(required = false)

private VisitListenerProvider[] visitListenerProviders;

// DSLContext for DB1

@Bean

public DefaultDSLContext dslContext1(@Qualifier("dataSourceConnectionProvider1") DataSourceConnectionProvider connectionProvider1,

@Qualifier("transactionProvider1") SpringTransactionProvider transactionProvider1) {

return new DefaultDSLContext(configuration(connectionProvider1, transactionProvider1));

}

// DSLContext for DB2

//

private DefaultConfiguration configuration(ConnectionProvider connectionProvider, TransactionProvider transactionProvider) {

DefaultConfiguration configuration = new DefaultConfiguration();

configurationsetSQLDialect(SQLDialectMYSQL);

configurationset(connectionProvider);

configurationset(transactionProvider);

if (thisrecordMapperProvider != null) {

configurationset(thisrecordMapperProvider);

}

if (thissettings != null) {

configurationset(thissettings);

}

configurationset(thisrecordListenerProviders);

configurationset(thisexecuteListenerProviders);

configurationset(thisvisitListenerProviders);

return configuration;

}

}

}

服务类

配置好DataSource,TransacationManager和DSLContext之后,服务类的配置就比较简单了,直接引用即可。注意由于存在多套Beans,需要通过@Qualifier注解指定装配实例。

@Transactional("TransactionManager1")//每个事务指定 tx

public class ServiceA {

@Autowired

@Qualifier("dslContext1")

protected DSLContext dsl;

}

数据库迁移框架Flyway

Flyway是一个轻量级的开源数据库迁移框架,使用非常广泛。

参照Boot自带的FlywayAutoConfiguration,同样可以写出如下配置类:

@Configuration

public class FlywayConfig {

@Bean(initMethod = "migrate")

@ConfigurationProperties(prefix = "fwdb1")

public Flyway flyway(@Qualifier("dataSource1") DataSource dataSource1) {

Flyway clinic = new Flyway();

clinicsetDataSource(dataSource1);

return clinic;

}

// DB2

//

/

@see FlywayAutoConfiguration

/

@Bean

@ConfigurationPropertiesBinding

public StringOrNumberToMigrationVersionConverter stringOrNumberMigrationVersionConverter() {

return new StringOrNumberToMigrationVersionConverter();

}

/

Convert a String or Number to a {@link MigrationVersion}

@see FlywayAutoConfiguration

/

private static class StringOrNumberToMigrationVersionConverter

implements GenericConverter {

private static final Set<ConvertiblePair> CONVERTIBLE_TYPES;

static {

Set<ConvertiblePair> types = new HashSet<ConvertiblePair>(2);

typesadd(new ConvertiblePair(Stringclass, MigrationVersionclass));

typesadd(new ConvertiblePair(Numberclass, MigrationVersionclass));

CONVERTIBLE_TYPES = CollectionsunmodifiableSet(types);

}

@Override

public Set<ConvertiblePair> getConvertibleTypes() {

return CONVERTIBLE_TYPES;

}

@Override

public Object convert(Object source, TypeDescriptor sourceType,

TypeDescriptor targetType) {

String value = ObjectUtilsnullSafeToString(source);

return MigrationVersionfromVersion(value);

}

}

}

applicationconf中的配置:

# DB1

fwdb1enabled=true

首先需要下载安装包,在百度搜索“SqlServer2005微软官网版本zip”,下载完成后运行“SqlServer2005微软官网版本\Servers\setupexe”文件。

等待系统配置自动检查完成后,勾选SQL Server Database Services、Integration Services、工作站组件联机丛书和开发工具,三项。实例名使用默认实例。

服务账户选择“使用内置系统账户”。身份验证模式选择“混合模式(windows身份验证和SQL Server身份验证)”,并输入数据库密码。

排序规则保持默认设置。功能选择,选择SQL Server的安装路径。

等待安装完成,直到出现“完成Microsoft SQL Server 2005安装”界面,点击“完成”。

打开“SQL Server Management Studio”,登录名为“sa”,密码为安装数据库时填写的密码。此时SQLServer2005即安装成功。

建立Oracle数据库需要以下步骤:

安装Oracle数据库软件:首先需要从Oracle官方网站下载合适的Oracle数据库软件,然后按照官方文档中的说明进行安装。

创建数据库实例:在安装完成后,需要使用Oracle提供的DBCA(Database Configuration Assistant)工具创建数据库实例。在创建数据库实例时,需要指定数据库的名称、字符集、管理员用户名和密码等信息。

配置数据库参数:数据库实例创建完成后,需要对数据库参数进行适当的配置,以优化数据库性能。Oracle数据库提供了多种方式来配置数据库参数,包括使用SQLPlus命令行工具和在Oracle Enterprise Manager中进行配置等。

创建表空间和用户:在数据库实例配置完成后,需要创建表空间和用户,以便存储和管理数据。表空间是一个逻辑存储单元,用于组织和管理数据库对象,而用户则是数据库中的一个实体,用于访问和管理数据库对象。

创建表和索引:创建表和索引是数据库设计的重要部分。表用于存储数据,而索引用于加速数据访问。在Oracle数据库中,可以使用SQL命令或Oracle Enterprise Manager来创建表和索引。

管理数据:最后,需要对数据库中的数据进行管理。管理数据包括数据的备份和恢复、数据的安全性管理以及数据库性能的监控和优化等。

以上是建立Oracle数据库的基本步骤,需要根据具体情况进行调整和优化。

以上就是关于如何在单个Boot应用中配置多数据库全部的内容,包括:如何在单个Boot应用中配置多数据库、怎么配置中控mssql2005数据库、oracle数据库怎么建等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/10131591.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存