千家信息网

怎么使用SpringBoot配置多数据源

发表于:2025-02-12 作者:千家信息网编辑
千家信息网最后更新 2025年02月12日,这篇文章主要介绍了怎么使用SpringBoot配置多数据源的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用SpringBoot配置多数据源文章都会有所收获,下面我们
千家信息网最后更新 2025年02月12日怎么使用SpringBoot配置多数据源

这篇文章主要介绍了怎么使用SpringBoot配置多数据源的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用SpringBoot配置多数据源文章都会有所收获,下面我们一起来看看吧。

1. 引入jar包

pom.xml文件

    4.0.0            org.springframework.boot        spring-boot-starter-parent        2.5.6                 com.multi.datasource    demo    0.0.1-SNAPSHOT    demo    Demo project for Spring Boot            1.8                            org.springframework.boot            spring-boot-starter                            org.springframework.boot            spring-boot-starter-web                            org.mybatis.spring.boot            mybatis-spring-boot-starter            1.3.2                            com.alibaba            druid            1.1.8                            mysql            mysql-connector-java                            org.projectlombok            lombok            1.16.22                            org.springframework.boot            spring-boot-starter-test            test                                                    org.springframework.boot                spring-boot-maven-plugin                                                                                        org.projectlombok                            lombok                                                                                    

2. properties配置

分别准备两个数据源

server.port=18888mybatis.mapper-locations=classpath:mapper/*.xmlmy1.datasource.url=jdbc:mysql://10.0.0.125:3306/wyl?autoReconnect=truemy1.datasource.driverClassName=com.mysql.cj.jdbc.Drivermy1.datasource.username=rootmy1.datasource.password=123456my2.datasource.url=jdbc:mysql://10.0.0.160:3306/wyl?autoReconnect=truemy2.datasource.driverClassName=com.mysql.cj.jdbc.Drivermy2.datasource.username=rootmy2.datasource.password=123456

3. 分别配置两个数据源

第一个数据源

package com.multi.datasource.config;import com.alibaba.druid.pool.DruidDataSource;import org.apache.ibatis.session.SqlSessionFactory;import org.mybatis.spring.SqlSessionFactoryBean;import org.mybatis.spring.annotation.MapperScan;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.jdbc.datasource.DataSourceTransactionManager;import javax.sql.DataSource;@Configuration@MapperScan(basePackages = My1DataSourceConfig.PACKAGE, sqlSessionFactoryRef = "my1SqlSessionFactory")public class My1DataSourceConfig {    static final String PACKAGE = "com.multi.datasource.dao.my1";    static final String MAPPER_LOCATION = "classpath:mapper/*.xml";    @Value("${my1.datasource.url}")    private String url;    @Value("${my1.datasource.username}")    private String user;    @Value("${my1.datasource.password}")    private String password;    @Value("${my1.datasource.driverClassName}")    private String driverClass;    @Bean(name = "my1DataSource")    public DataSource my1DataSource() {        DruidDataSource dataSource = new DruidDataSource();        dataSource.setDriverClassName(driverClass);        dataSource.setUrl(url);        dataSource.setUsername(user);        dataSource.setPassword(password);        dataSource.setMaxWait(Integer.MAX_VALUE);        dataSource.setTestOnBorrow(true);        dataSource.setTestOnReturn(true);        dataSource.setTestWhileIdle(true);        return dataSource;    }    @Bean(name = "my1TransactionManager")    public DataSourceTransactionManager my1TransactionManager() {        return new DataSourceTransactionManager(my1DataSource());    }    @Bean(name = "my1SqlSessionFactory")    public SqlSessionFactory my1SqlSessionFactory(@Qualifier("my1DataSource") DataSource my1DataSource)            throws Exception {        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();        sessionFactory.setDataSource(my1DataSource);        sessionFactory.setMapperLocations(                new PathMatchingResourcePatternResolver().getResources(My1DataSourceConfig.MAPPER_LOCATION));        return sessionFactory.getObject();    }}

第二个数据源

package com.multi.datasource.config;import com.alibaba.druid.pool.DruidDataSource;import org.apache.ibatis.session.SqlSessionFactory;import org.mybatis.spring.SqlSessionFactoryBean;import org.mybatis.spring.annotation.MapperScan;import org.springframework.beans.factory.annotation.Qualifier;import org.springframework.beans.factory.annotation.Value;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.core.io.support.PathMatchingResourcePatternResolver;import org.springframework.jdbc.datasource.DataSourceTransactionManager;import javax.sql.DataSource;@Configuration@MapperScan(basePackages = My1DataSourceConfig.PACKAGE, sqlSessionFactoryRef = "my1SqlSessionFactory")public class My1DataSourceConfig {    static final String PACKAGE = "com.multi.datasource.dao.my1";    static final String MAPPER_LOCATION = "classpath:mapper/*.xml";    @Value("${my1.datasource.url}")    private String url;    @Value("${my1.datasource.username}")    private String user;    @Value("${my1.datasource.password}")    private String password;    @Value("${my1.datasource.driverClassName}")    private String driverClass;    @Bean(name = "my1DataSource")    public DataSource my1DataSource() {        DruidDataSource dataSource = new DruidDataSource();        dataSource.setDriverClassName(driverClass);        dataSource.setUrl(url);        dataSource.setUsername(user);        dataSource.setPassword(password);        dataSource.setMaxWait(Integer.MAX_VALUE);        dataSource.setTestOnBorrow(true);        dataSource.setTestOnReturn(true);        dataSource.setTestWhileIdle(true);        return dataSource;    }    @Bean(name = "my1TransactionManager")    public DataSourceTransactionManager my1TransactionManager() {        return new DataSourceTransactionManager(my1DataSource());    }    @Bean(name = "my1SqlSessionFactory")    public SqlSessionFactory my1SqlSessionFactory(@Qualifier("my1DataSource") DataSource my1DataSource)            throws Exception {        final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();        sessionFactory.setDataSource(my1DataSource);        sessionFactory.setMapperLocations(                new PathMatchingResourcePatternResolver().getResources(My1DataSourceConfig.MAPPER_LOCATION));        return sessionFactory.getObject();    }}

4. Dao目录

为了区分两个数据源,分别设置了不同的目录

package com.multi.datasource.dao.my1;import com.multi.datasource.entity.UserEntity;import org.apache.ibatis.annotations.Mapper;@Mapperpublic interface Test1Mapper {        UserEntity query();    }
package com.multi.datasource.dao.my2;import com.multi.datasource.entity.UserEntity;import org.apache.ibatis.annotations.Mapper;@Mapperpublic interface Test2Mapper {        UserEntity query();    }

5. Entity

package com.multi.datasource.entity;import lombok.Data;@Datapublic class UserEntity {    private String userName;}

6. Mapper文件

从my1数据源查询

        

从my2数据源查询

            

7. Controller测试

package com.multi.datasource.controller;import com.multi.datasource.dao.my1.Test1Mapper;import com.multi.datasource.dao.my2.Test2Mapper;import com.multi.datasource.entity.UserEntity;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController;import javax.annotation.Resource;@RestControllerpublic class TestController {    @Resource    private Test1Mapper test1Mapper;    @Resource    private Test2Mapper test2Mapper;    @RequestMapping("query")    public void query() {        UserEntity user1 = test1Mapper.query();        System.out.println("my1 dataSource:" + user1);        UserEntity user2 = test2Mapper.query();        System.out.println("my2 dataSource:" + user2);    }}

两个数据源,对应的user_name分别是zhangsan和lisi

8. 结果验证

访问 http://localhost:18888/query,结果如下

关于"怎么使用SpringBoot配置多数据源"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"怎么使用SpringBoot配置多数据源"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。

0