【附源码】Spring Boot实战系列——三、配置多个数据源(Mysql数据库)

457 阅读1分钟

【附源码】Spring Boot实战系列——一、配置内存数据库H2
【附源码】Spring Boot实战系列——二、配置多个数据源(H2数据库)
【附源码】Spring Boot实战系列——三、配置多个数据源(Mysql数据库)
【附源码】Spring Boot实战系列——四、日志管理
【附源码】Spring Boot实战系列——五、事务抽象
【附源码】Spring Boot实战系列——六、货币存数据库的处理

引入Mysql依赖

  • Mysql驱动
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
  • mybatis持久层框架
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>2.1.4</version>
</dependency>

代码结构

数据源db1配置文件

Db1Config.java

@Slf4j
@Configuration
@MapperScan(basePackages = "com.qiuyi.springdemo.dao.db1", sqlSessionTemplateRef = "db1SqlSessionTemplate")
public class Db1Config {
    @Value("${spring.datasource.db1.jdbc-url}")
    private String db1JdbcUrl;


    /**
     * 是application.properties中的spring.datasource.db1配置生效
     * @return
     */
    @Bean(name = "db1DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.db1")
    @Primary
    public DataSource db1DataSource() {
        log.info(db1JdbcUrl);
        return DataSourceBuilder.create().build();
    }


    /**
     * 事务管理器,在实例化时注入主库db1
     * @param dataSource
     * @return
     */
    @Bean(name = "db1TransactionManager")
    @Primary
    public DataSourceTransactionManager db1TransactionManager(@Qualifier("db1DataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }


    /**
     * 将配置信息注入到SqlSessionFactoryBean中
     * @param dataSource    数据库连接信息
     * @return
     * @throws Exception
     */
    @Bean(name = "db1SqlSessionFactory")
    @Primary
    public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:mapper/db1/*.xml"));


        // 数据库字段映射到类字段,下划线风格转驼峰风格
        Objects.requireNonNull(bean.getObject()).getConfiguration().setMapUnderscoreToCamelCase(true);
        return bean.getObject();
    }


    /**
     * SqlSessionTemplate具有线程安全性
     * @param sqlSessionFactory
     * @return
     * @throws Exception
     */
    @Bean(name = "db1SqlSessionTemplate")
    @Primary
    public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {
        return new SqlSessionTemplate(sqlSessionFactory);
   

数据源db2配置文件类似,看源码。

数据访问层

dao/db1/NewsDao.java

  • 通过注解
  • 通过xml
@Repository
@Mapper
public interface NewsDao {
    @Select("select * from news")
    List<News> getAllNews();


    List<News> queryNewsAll();
}

xml的写法

resources/mapper/db1/NewsDao.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">


<mapper namespace="com.qiuyi.springdemo.dao.db1.NewsDao">
    <!--查询所有资讯信息-->
    <select id="queryNewsAll" resultType="com.qiuyi.springdemo.model.News">
      SELECT * FROM `news`
    </select>
</mapper>

开启sql语句打印

logging.level.com.qiuyi.springdemo.dao.*=DEBUG

运行结果

源码下载地址

github.com/qiulanzhu/S…