springboot-多數據源配置

一、在現實場景中經常用到到數據源配置的場景,項目可能會使用多個數據源入sqlserver mysql等,針對springboot+mybatis 服務,以下是針對兩個數據源進行的配置。

目錄結構如下:

1、首先對mybatis配置進行初步配置。mybatis.cfg.xml

<?xml version="1.0" encoding="GBK" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <!--<settings>-->
        <!--<setting name="logImpl" value="STDOUT_LOGGING" />-->
    <!--</settings>-->
    <typeAliases>
        <!--<typeAlias alias="ss_GetCards" type="com.jdd.data.soa.model.SSMatchCard" />
        <typeAlias alias="ss_GetTeamStatisticsData" type="com.jdd.data.soa.model.SSGetTeamStatisticsData" />
        <typeAlias alias="ss_GetGoals" type="com.jdd.data.soa.model.SSMatchGoal" />
        <typeAlias alias="ss_GetChanges" type="com.jdd.data.soa.model.SSGetChange" />
        <typeAlias alias="ss_GetMatchTeamPlayer" type="com.jdd.data.soa.model.SSGetMatchTeamPlayer" />-->
    </typeAliases>
</configuration>

2、接着對數據源1配置:

package com.jdddata.dic.base.service.match.common.db;

import org.apache.commons.lang.ArrayUtils;
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.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;

import javax.sql.DataSource;


@Configuration()
@MapperScan(basePackages = {"com.jdddata.dic.base.service.match.dao.sportRadar"}, sqlSessionFactoryRef = "sqlSessionFactoryBean")
public class DatabaseConfig {


    @Bean(name = "sportRadarDataSource")
    @Qualifier("sportRadarDataSource")
    @Primary
    @ConfigurationProperties(prefix = "spring.datasource.primary")
    public DataSource sportRadarDataSource() {

        return DataSourceBuilder.create().build();
    }

    @Bean("sqlSessionFactoryBean")
    public SqlSessionFactory sqlSessionFactoryBean(@Qualifier("sportRadarDataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);

        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        Resource[] sportRadarList = resolver.getResources("classpath:mapper/sportRadar/*.xml");
//        Resource[] ldList = resolver.getResources("classpath:mapper/ld/*.xml");
//        Resource[] optaList = resolver.getResources("classpath:mapper/opta/*.xml");
//        Resource[] resources = (Resource[]) ArrayUtils.addAll(sportRadarList);
//        resources = (Resource[]) ArrayUtils.addAll(resources, optaList);
        sqlSessionFactoryBean.setMapperLocations(sportRadarList);
        sqlSessionFactoryBean.setConfigLocation(resolver.getResource("classpath:mybatis.cfg.xml"));
        return sqlSessionFactoryBean.getObject();
    }

    @Bean("transactionManager")
    public DataSourceTransactionManager transactionManager(@Qualifier("sportRadarDataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

}

3、數據源2配置

package com.jdddata.dic.base.service.match.common.db;

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.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
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 = "com.jdddata.dic.base.service.match.dao.jddData", sqlSessionFactoryRef = "jddData_SqlSessionFactoryBean")
public class JddDataDBConfig {


    @Bean(name = "jddData_DataSource")
    @Qualifier("jddData_DataSource")
    @ConfigurationProperties(prefix = "spring.datasource.jddData")
    public DataSource optaDataSource() {
        return DataSourceBuilder.create().build();
    }

    @Bean("jddData_SqlSessionFactoryBean")
    public SqlSessionFactory sqlSessionFactoryBean(@Qualifier("jddData_DataSource") DataSource dataSource) throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(dataSource);

        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:mapper/jddData/*.xml"));
        sqlSessionFactoryBean.setConfigLocation(resolver.getResource("classpath:mybatis.cfg.xml"));
        return sqlSessionFactoryBean.getObject();
    }

    @Bean("jddData_transactionManager")
    public DataSourceTransactionManager transactionManager(@Qualifier("jddData_DataSource") DataSource dataSource) {
        return new DataSourceTransactionManager(dataSource);
    }

}

4、xml mapper文件示例:如意nameSpace一定要做更改爲dao層對應的mapper文件

<?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.jdddata.dic.base.service.match.dao.soccerRadar.SMatchAnalyzeLiveMapper" >

    <resultMap id="MatchCardDo" type="com.jdddata.dic.base.service.match.model.match.analyzelive.MatchCardDo">
        <result column="MATCH_ID" property="matchId"/>
        <result column="TEAM" property="team"/>
        <result column="TIME" property="time"/>
        <result column="TYPE" property="type"/>
        <result column="PLAYER_ID" property="playerId"/>
        <result column="playerName" property="playerName"/>
    </resultMap>

    <select id="selectCardList" parameterType="map" resultMap="MatchCardDo">
        select
        gf.game_id MATCH_ID,
        gf.team_side TEAM,
        gf.foul_time TIME,
        gf.foul_type TYPE,
        gf.player_id PLAYER_ID,
        CASE
        WHEN p.name_chs_abbr IS NOT NULL and p.name_chs_abbr != '' THEN p.name_chs_abbr
        WHEN p.name_chs IS NOT NULL and p.name_chs != '' THEN  p.name_chs
        WHEN p.name_eng_abbr IS NOT NULL and p.name_eng_abbr != '' THEN  p.name_eng_abbr
        WHEN p.name_eng IS NOT NULL and p.name_eng != '' THEN  p.name_eng
        END AS playerName
        from game_foul gf
        left join player p on gf.player_id = p.id
        where gf.foul_type in
        <foreach collection="foulTypes" index="index" item="foulType" open="(" close=")" separator=",">
            #{foulType}
        </foreach>
        AND gf.game_id = #{matchId} AND gf.foul_time>0
    </select>
</mapper>

 

注意:

1、Mapperscan中需要加入需要掃描的dao層。

2、setMapperLocations 需要加入資源文件夾下的xml文件掃描地址。

3、setConfigLocation 加入mybatis.cfg.xml配置文件。

config配置-示例

###########################
#spring.datasource.primary.url=jdbc:sqlserver://XXXXdatabaseName=DataCenter_Trade
spring.datasource.primary.username=XXX
spring.datasource.primary.password=XX
spring.datasource.primary.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.primary.test-while-idle=true
spring.datasource.primary.validation-query=SELECT 1;
spring.datasource.primary.time-between-eviction-runs-millis=60000
spring.datasource.primary.max-active=5
spring.datasource.primary.max-idle=10
spring.datasource.primary.min-idle=1
spring.datasource.primary.max-wait-millis=60000

 

 

maven配置:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- sql server驅動 -->
<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>sqljdbc4</artifactId>
</dependency>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章