在配置同时访问多个数据库时,可以通过以下步骤实现:
1、添加依赖
在项目的pom.xml
文件中添加相关依赖,确保项目能够支持多数据源的配置,使用Spring Boot和MyBatis时,需要引入如下依赖:
<dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.5.5</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.3</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>2.0.7</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency>
2、配置文件
在application.yml
或application.properties
中配置多个数据源的信息,假设有两个数据库test_db
和biztest_db
,其配置如下:
spring: datasource: dev: driver-class-name: com.mysql.cj.jdbc.Driver jdbcUrl: jdbc:mysql://localhost:3306/test_db?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8 username: root password: 123456 type: com.alibaba.druid.pool.DruidDataSource local: driver-class-name: com.mysql.cj.jdbc.Driver jdbcUrl: jdbc:mysql://localhost:3306/biztest_db?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=GMT%2B8 username: biz_rw password: 654321 type: com.alibaba.druid.pool.DruidDataSource
3、创建配置类
为每个数据源创建一个配置类,用于生成相应的DataSource
和SqlSessionFactory
对象。
@Configuration @MapperScan(basePackages = "com.yourcom.proname.repository.mapper.dev", sqlSessionFactoryRef = "devSqlSessionFactory") public class DevDataSourceConfig { @Primary @Bean(name = "devDataSource") @ConfigurationProperties("spring.datasource.dev") public DataSource masterDataSource() { return DruidDataSourceBuilder.create().build(); } @Primary @Bean(name = "devTransactionManager") public DataSourceTransactionManager masterTransactionManager(@Qualifier("devDataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Primary @Bean(name = "devSqlSessionFactory") @ConfigurationPropertiesBinding public SqlSessionFactory sqlSessionFactory(@Qualifier("devDataSource") DataSource dataSource) throws Exception { MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean(); factoryBean.setDataSource(dataSource); return factoryBean.getObject(); } } @Configuration @MapperScan(basePackages = "com.yourcom.proname.repository.mapper.local", sqlSessionFactoryRef = "localSqlSessionFactory") public class LocalDataSourceConfig { @Bean(name = "localDataSource") @ConfigurationProperties("spring.datasource.local") public DataSource druidDataSource() { return DruidDataSourceBuilder.create().build(); } @Bean(name = "localTransactionManager") public DataSourceTransactionManager masterTransactionManager(@Qualifier("localDataSource") DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } @Bean(name = "localSqlSessionFactory") public SqlSessionFactory sqlSessionFactory(@Qualifier("localDataSource") DataSource dataSource) throws Exception { MybatisSqlSessionFactoryBean factoryBean = new MybatisSqlSessionFactoryBean(); factoryBean.setDataSource(dataSource); return factoryBean.getObject(); } }
相关问题与解答
1、为什么需要配置多个数据源?
配置多个数据源的需求通常出现在需要从不同数据库读取数据的场景下,在一个电商系统中,用户信息存储在用户数据库中,订单信息存储在订单数据库中,如果一次请求需要获取订单相关信息,还需要查询下单的用户信息,那么就需要连接两个数据库,通过配置多个数据源,可以实现这种跨数据库的数据访问。
2、如何切换不同的数据源?
切换不同的数据源可以通过动态数据源路由来实现,在Spring Boot中,可以使用AbstractRoutingDataSource
类来创建自定义的数据源路由逻辑,根据业务需求,可以在运行时决定使用哪个数据源进行操作,这通常涉及在Service层或DAO层根据当前线程的上下文或其他条件动态设置数据源。
小伙伴们,上文介绍了“访问同时的数据库如何配置”的内容,你了解清楚吗?希望对你有所帮助,任何问题可以给我留言,让我们下期再见吧。
原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/634774.html