SpringBoot多数据源 源代码参考

数据源1:



import javax.sql.DataSource;



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.context.properties.ConfigurationProperties;

import org.springframework.boot.jdbc.DataSourceBuilder;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.context.annotation.Primary;

import org.springframework.core.io.DefaultResourceLoader;

import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

import org.springframework.jdbc.core.JdbcTemplate;

import org.springframework.jdbc.datasource.DataSourceTransactionManager;



import com.lnsoft.common.dbutil.ProJdbcTemplate;



/**

 * 数据源配置

 *

 */

@Configuration

@MapperScan(basePackages = GydlDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "gydlSqlSessionFactory")

public class GydlDataSourceConfig {

// 精确数据源目录,以便与其他数据源隔离

static final String PACKAGE = "com.lnsoft.patrol.mapper.gydl";

static final String MAPPER_LOCATION = "classpath:mybatis/mapper/gydl/*.xml";

static final String CONFIG_LOCATION = "classpath:mybatis/mybatis-config.xml";


@Primary

@Bean(name = "gydlDataSource")

@ConfigurationProperties(prefix = "spring.datasource.gydl")

public DataSource gydlDataSource() {

return DataSourceBuilder.create().build();

}



@Bean(name = "gydlJdbcTemplate")

public JdbcTemplate gydlJdbcTemplate(@Qualifier("gydlDataSource") javax.sql.DataSource dataSource) {

return new JdbcTemplate(dataSource);

}



@Bean(name = "proJdbcTemplate")

public ProJdbcTemplate proJdbcTemplate(@Qualifier("gydlDataSource") javax.sql.DataSource dataSource) {

return new ProJdbcTemplate(dataSource);

}



/*

 * 配置事务管理器

 */

@Primary

@Bean(name = "gydlTransactionManager")

public DataSourceTransactionManager gydlTransactionManager() {

return new DataSourceTransactionManager(gydlDataSource());

}



/*

 * SqlSessionFactory配置

 */

@Primary

@Bean(name = "gydlSqlSessionFactory")

public SqlSessionFactory gydlSqlSessionFactory(@Qualifier("gydlDataSource") DataSource gydlDataSource)

throws Exception {

final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();

sessionFactory.setDataSource(gydlDataSource);

sessionFactory.setTypeAliasesPackage("com.lnsoft.visual.pojo");

sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(CONFIG_LOCATION));

sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_LOCATION));

return sessionFactory.getObject();

}

}

数据源2:


/**
 * 数据源配置
  *
 */
@Configuration
@MapperScan(basePackages = GisDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "gydlgisSqlSessionFactory")
public class GisDataSourceConfig {
	// 精确数据源目录,以便与其他数据源隔离
	static final String PACKAGE = "com.lnsoft.patrol.mapper.gis";
	static final String MAPPER_LOCATION = "classpath:mybatis/mapper/gis/*.xml";
	static final String CONFIG_LOCATION = "classpath:mybatis/mybatis-config.xml";
	@Bean(name = "gydlgisDataSource")
	@ConfigurationProperties(prefix = "spring.datasource.gydlgis")
	public DataSource gydlgisDataSource() {
		return DataSourceBuilder.create().build();
	}

	@Bean(name = "gydlgisJdbcTemplate")
	public JdbcTemplate gydlgisJdbcTemplate(@Qualifier("gydlgisDataSource") javax.sql.DataSource dataSource) {
		return new JdbcTemplate(dataSource);
	}

	/*
	 * 配置事务管理器
	 */
	@Bean(name = "gydlgisTransactionManager")
	public DataSourceTransactionManager gydlgisTransactionManager() {
		return new DataSourceTransactionManager(gydlgisDataSource());
	}

	/*
	 * SqlSessionFactory配置
	 */
	@Bean(name = "gydlgisSqlSessionFactory")
	public SqlSessionFactory gydlgisSqlSessionFactory(@Qualifier("gydlgisDataSource") DataSource gydlgisDataSource)
			throws Exception {
		final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
		sessionFactory.setDataSource(gydlgisDataSource);
		sessionFactory.setTypeAliasesPackage("com.lnsoft.visual.pojo");
		sessionFactory.setConfigLocation(new DefaultResourceLoader().getResource(CONFIG_LOCATION));
		sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources(MAPPER_LOCATION));
		return sessionFactory.getObject();
	}
}

mybatis-config.xml文件配置


<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<settings>
        <setting name="jdbcTypeForNull" value="NULL"></setting>
		<setting name="cacheEnabled" value="true"></setting>
		<setting name="callSettersOnNulls" value="true"></setting>
        <setting name="logImpl" value="STDOUT_LOGGING"></setting>
	</settings>
	<typeAliases>
		<typeAlias alias="Integer" type="java.lang.Integer" />
		<typeAlias alias="Long" type="java.lang.Long" />
		<typeAlias alias="HashMap" type="java.util.HashMap" />
		<typeAlias alias="LinkedHashMap" type="java.util.LinkedHashMap" />
		<typeAlias alias="ArrayList" type="java.util.ArrayList" />
		<typeAlias alias="LinkedList" type="java.util.LinkedList" />
	</typeAliases>
</configuration>

下面为项目结构图,结合上面的数据源代码中的一些参数配置理解作为参考:

下面关于application.properties中的配置参数图,和JAVA代码多数据源配置的注解@ConfigurationProperties有关作为参考

总结:

多数据源无非就是在JAVA代码中配置了不同的SqlSessionFactory 和不同的事务管理器 通过classpath绑定相关的访问数据库的接口,从而实现了在写业务代码无感知的去调不同的数据源。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值