Springboot2.x整合Mybatis多数据源

一、环境信息

二、项目结构

三、代码整合

1、添加依赖

依赖在创建springboot工程时直接加入mybatis、mysql,无需手动引入

2、配置文件信息

#数据源1
spring.datasource.lydb.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.lydb.jdbc-url=jdbc:mysql://xxx.xxx.xxx.xxx:xxx/xxx?useUnicode=true&characterEncoding=utf8 spring.datasource.lydb.username=xxx spring.datasource.lydb.password=xxx #数据源2 spring.datasource.hdbg.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.hdbg.jdbc-url=jdbc:mysql://xxx.xxx.xxx.xxx:xxx/xxx?useUnicode=true&characterEncoding=utf8 spring.datasource.hdbg.username=xxx spring.datasource.hdbg.password=xxx

3、数据源配置类(有几个数据源,就有几个此类)

以数据源lydb为例

@Configuration
@MapperScan(basePackages = "com.abc5w.hudong_report_platfrom_crawler.dao.lydb", sqlSessionTemplateRef = "lydbSqlSessionTemplate")
public class LydbDBConfig {

    private static String MAPPER_PATH = "classpath:mapper/lydb/*.xml";

    /**
     * 创建 DataSource
     *
     * @return
     */
    @Bean("lydbDataSource")
    @ConfigurationProperties("spring.datasource.lydb")
    public DataSource lydbDataSource() {
        return DataSourceBuilder.create().build();
    }

    /**
     * 创建 SQL会话工厂
     *
     * @param dataSource
     * @return
     * @throws Exception
     */
    @Bean("lydbSqlSessionFactory")
    public SqlSessionFactory lydbSqlSessionFactory(@Qualifier("lydbDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);
        sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_PATH));
        return sqlSessionFactoryBean.getObject();
    }

    /**
     * 创建 事务管理器
     *
     * @param dataSource
     * @return
     */
    @Bean("lydbTransactionManager")
    public DataSourceTransactionManager lydbTransactionManager(@Qualifier("lydbDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

    /**
     * 创建 SqlSession模板
     *
     * @param sqlSessionFactory
     * @return
     */
    @Bean("lydbSqlSessionTemplate")
    public SqlSessionTemplate lydbSqlSessionTemplate(@Qualifier("lydbSqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
}

另一个数据源和上述代码一样,修改相关名称即可

4、创建对应的dao路径,resources下创建对应的mapper路径,不同路径来区分各个数据源

代码如下即可:

public interface CninfoFilingMapper {

    Announcement getAnnouncementById(String announcementId);

    void insert(Map<String, Object> param);

    List<String> getStockCodeList();

    void update(Map<String, Object> param);
}
<?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.abc5w.hudong_report_platfrom_crawler.dao.hdbg.CninfoFilingMapper">

    <insert id="insert" parameterType="map">
        INSERT INTO t_filing(noticedate, originContent, stockcode, title, pdfUrl, sourceUrl, enddate, year, qType, contentType, canceled, announcementId)
        VALUES (#{noticedate}, #{originContent}, #{stockcode}, #{title}, #{pdfUrl}, #{sourceUrl}, #{enddate}, #{year}, #{qType}, #{contentType}, #{canceled}, #{announcementId})
    </insert>

</mapper>

注意mapper.xml中namespace的路径信息

5、controller、service等类和正常情况一样,没有需要特别注意的地方,在此忽略

6、启动类添加相关注解(加了定时任务,没有则忽略)

@SpringBootApplication
@EnableScheduling
public class HudongReportPlatfromCrawlerApplication {

    public static void main(String[] args) {
        SpringApplication.run(HudongReportPlatfromCrawlerApplication.class, args);
    }

}

已上就已经整合好多数据源了,主要注意的地方是2、3、4步,对应好路径、名称就ok了!

【注意事项】

在配置过程中出现了"jdbcUrl is required with driverClassName"的错误信息,此时应将配置文件中的"spring.datasource.primary.url"修改为"spring.datasource.primary.jdbc-url"

猜你喜欢

转载自www.cnblogs.com/Arthemis-z/p/12197462.html