spring boot 本身自带对数据源的支持。 但在项目开发过程中,存在这种情况需要用到多数据源,用spring boot 自带的数据源就不是那么方便了。这里有个实例实现spring boot 完成多数据源的配置。

项目的目录结构是这样的。

下面看看数据源配置

// 主数据源配置
package com.tansun.beanconfig.datasourse;import java.util.Properties;import javax.sql.DataSource;import org.apache.ibatis.mapping.DatabaseIdProvider;
import org.apache.ibatis.mapping.VendorDatabaseIdProvider;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;import com.alibaba.druid.pool.DruidDataSource;/*** 注:主程序使用数据源* @author kangx**/
@Configuration
@EnableAutoConfiguration
@MapperScan(basePackages = MainDSConfig.PACKAGE, sqlSessionTemplateRef = "masterSqlSessionTemplate")
public class MainDSConfig {// 精确到 master 目录,以便跟其他数据源隔离,不同数据源扫描的mapper// 文件地址是不一样的,如果放到统一路径启动会报生成bean冲突。static final String PACKAGE = "com.tansun.model.*.mapper";static final String MAPPER_LOCATION = "classpath:com/tansun/model/*/master/*.xml";@Value("${spring.datasource.url}")private String url;@Value("${spring.datasource.username}")private String user;@Value("${spring.datasource.password}")private String password;@Value("${spring.datasource.driver-class-name}")private String driverClass;/*** 注:主数据源加@Primary 注解 表示当系统有多个datasource 满足条件,* 默认使用@Primary标记的数据源* @return*/@Bean(name = "masterDataSource")@Primarypublic DataSource masterDataSource() {DruidDataSource dataSource = new DruidDataSource();dataSource.setDriverClassName(driverClass);dataSource.setUrl(url);dataSource.setDbType("oracle");dataSource.setUsername(user);dataSource.setPassword(password);return dataSource;}@Bean(name = "masterTransactionManager")@Primarypublic DataSourceTransactionManager masterTransactionManager() {return new DataSourceTransactionManager(masterDataSource());}@Bean(name = "masterSqlSessionFactory")@Primarypublic SqlSessionFactory masterSqlSessionFactory(@Qualifier("masterDataSource") DataSource masterDataSource,@Qualifier("databaseIdProvider") DatabaseIdProvider databaseIdProvider)throws Exception {final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();sessionFactory.setDataSource(masterDataSource);sessionFactory.setDatabaseIdProvider(databaseIdProvider);return sessionFactory.getObject();}@Bean(name = "masterSqlSessionTemplate")public SqlSessionTemplate outerSqlSessionTemplate(@Qualifier("masterSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {return new SqlSessionTemplate(sqlSessionFactory);}@Bean("databaseIdProvider")public DatabaseIdProvider getDatabaseIdProvider() {DatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider();Properties pro = new Properties();pro.setProperty("Oracle", "oracle");pro.setProperty("MySQL", "mysql");databaseIdProvider.setProperties(pro);return databaseIdProvider;}}

// 从数据源配置

package com.tansun.beanconfig.datasourse;import java.util.Properties;import javax.sql.DataSource;import org.apache.ibatis.mapping.DatabaseIdProvider;
import org.apache.ibatis.mapping.VendorDatabaseIdProvider;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.mybatis.spring.SqlSessionTemplate;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;import com.alibaba.druid.pool.DruidDataSource;
/*** 注:定时任务使用数据源* @author kangx*/
@Configuration
@EnableAutoConfiguration
// import 表示引用主数据源的配置bean
@Import(value = { MainDSConfig.class })
@MapperScan(basePackages = RunTaskDSConfig.PACKAGE, sqlSessionTemplateRef = "runtaskSqlSessionTemplate")
public class RunTaskDSConfig {// 精确到 master 目录,以便跟其他数据源隔离--这儿扫描的地址和主数据地址//不同static final String PACKAGE = "com.tansun.taskmodel.*.mapper";static final String MAPPER_LOCATION = "classpath:com/tansun/taskmodel/*/master/*.xml";@Value("${runtask.datasource.url}")private String url;@Value("${runtask.datasource.username}")private String user;@Value("${runtask.datasource.password}")private String password;@Value("${runtask.datasource.driverClassName}")private String driverClass;@Bean(name = "runtaskDataSource")public DataSource masterDataSource() {DruidDataSource dataSource = new DruidDataSource();dataSource.setDriverClassName(driverClass);dataSource.setUrl(url);dataSource.setUsername(user);dataSource.setDbType("mysql");dataSource.setPassword(password);return dataSource;}@Bean(name = "runtaskTransactionManager")public DataSourceTransactionManager masterTransactionManager() {return new DataSourceTransactionManager(masterDataSource());}@Bean(name = "runtaskSqlSessionFactory")public SqlSessionFactory masterSqlSessionFactory(@Qualifier("runtaskDataSource") DataSource masterDataSource,@Qualifier("databaseIdProvider") DatabaseIdProvider databaseIdProvider)throws Exception {final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();sessionFactory.setDataSource(masterDataSource);sessionFactory.setDatabaseIdProvider(databaseIdProvider);return sessionFactory.getObject();}@Bean(name = "runtaskSqlSessionTemplate")public SqlSessionTemplate outerSqlSessionTemplate(@Qualifier("runtaskSqlSessionFactory") SqlSessionFactory sqlSessionFactory) throws Exception {return new SqlSessionTemplate(sqlSessionFactory);}@Bean("runtaskDatabaseIdProvider")public DatabaseIdProvider getDatabaseIdProvider() {DatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider();Properties pro = new Properties();pro.setProperty("Oracle", "oracle");pro.setProperty("MySQL", "mysql");databaseIdProvider.setProperties(pro);return databaseIdProvider;}
}

注 :
1主数据源配置 bean 上加@Primary标签,表示当找多个符合的匹配时,使用由 primary 标记的bean。 如果不加Primary标签启动会报错。
2 runtaskDatabaseIdProvider -> bean 配置是为了设置数据库兼容的设置。该处设置的值可以在, mapper文件中取到,用于标记不同的数据库,这一过程是有spring-mybatis 底层操作完成的。

数据源配置属性文件
所在路径

#数据库配置
spring.datasource.driver-class-name=
spring.datasource.url=
spring.datasource.username=
spring.datasource.password=
spring.jpa.show-sql=true#定时任务数据源配置
#runtask.datasource.url=jdbc:mysql://localhost:3306/student?useUnicode=true&characterEncoding=utf8
#runtask.datasource.username=root
#runtask.datasource.password=root
#runtask.datasource.driverClassName=com.mysql.jdbc.Driver
runtask.datasource.driverClassName=
runtask.datasource.url=
runtask.datasource.username=
runtask.datasource.password=
runtask.jpa.show-sql=true

转载于:https://blog.51cto.com/11232071/2144930

sping boot 配置多数据源相关推荐

  1. java多个数据库数据进行访问_通过Spring Boot配置动态数据源访问多个数据库的实现代码...

    之前写过一篇博客<Spring+Mybatis+Mysql搭建分布式数据库访问框架>描述如何通过Spring+Mybatis配置动态数据源访问多个数据库.但是之前的方案有一些限制(原博客中 ...

  2. mysql 多数据源访问_通过Spring Boot配置动态数据源访问多个数据库的实现代码

    之前写过一篇博客<Spring+Mybatis+Mysql搭建分布式数据库访问框架>描述如何通过Spring+Mybatis配置动态数据源访问多个数据库.但是之前的方案有一些限制(原博客中 ...

  3. boot jndi数据源 spring_使用Spring Boot配置JNDI数据源 -Roy教程

    在这篇文章中,我们将看到如何使用Spring Boot配置JNDI数据源.JNDI数据源与JDBC数据源非常相似.JNDI数据源访问在应用程序服务器中预定义和配置并作为JNDI资源或服务发布的数据库连 ...

  4. Spring Boot配置多数据源

    application.properties文件 server.port=8053spring.datasource.primary.jdbc-url=jdbc:mysql://xxxxxxx:330 ...

  5. sping boot集成多数据源的时候会出现 unsatisfied dependency expressed through method

    因为springboot首推的连接池使用了HikariCP连接池,GET到这个点, HikariDataSource的获取数据库连接的getConnection方法 修改application.pro ...

  6. Spring Boot Jpa多数据源配置

    2019独角兽企业重金招聘Python工程师标准>>> 前言 随着业务量发展,我们通常会进行数据库拆分或是引入其他数据库,从而我们需要配置多个数据源,如:user一个库,busine ...

  7. springboot默认数据源如何设置连接数_spring boot基于DRUID数据源密码加密及数据源监控实现...

    项目源码路径:https://github.com/Syske/learning-dome-code.git 前言 随着需求和技术的日益革新,spring boot框架是越来越流行,也越来越多地出现在 ...

  8. mybatis配置mysql数据源_springboot+mybatis+Druid配置多数据源(mysql+postgre)

    springboot+mybatis+Druid配置多数据源(mysql+postgre) 引入pom依赖 org.mybatis.spring.boot mybatis-spring-boot-st ...

  9. springboot集成redis配置多数据源

    [前言]在开发需求中,很多情况一个数据源是不能够满足业务需求的,常常需要我们去配置多个数据源去综合使用完成业务需要的功能 其实多数据源本质就是多个redisTemplate [代码] 1.依赖(这里以 ...

最新文章

  1. 教你简单解决过拟合问题(附公式)
  2. small android,Android-Small框架-基础
  3. 【Python】编程笔记5
  4. java内部类为什么会持有外部类的引用_java中内部类为什么会持有外部类的引用?...
  5. Linux中shell变量作用域笔记
  6. Generative Adversarial Learning Towards Fast Weakly Supervised Detection(CVPR2018)阅读笔记
  7. 【福利】MySQL vs Postgre SQL: 5个你最关注的非技术维度的区别
  8. Linq中常用的方法
  9. testlink配置修改
  10. MFS(一)---mfs详解与部署
  11. Android超人气系列动态壁纸下载(免费)
  12. Photoshop Resource(PS网站资源)
  13. python 古典密码第一弹(凯撒密码,Playfair密码,维吉尼亚密码)
  14. css设置overflow:hiden行内元素会发生偏移的现象
  15. 每天记账,是穷人才会做的事?
  16. PostgreSQL:关于 socket 文件 /tmp/.s.PGSQL.nnnn 丢失处理
  17. 全球与中国DIN导轨式信号调理器市场现状及未来发展趋势
  18. linux怎么敲出特殊字符,如何在Linux中快速输入特殊字符
  19. Tess4J 简单运用 巨坑太多了
  20. Android “退一步”的布局加载优化

热门文章

  1. 关于watch和computed的执行时机
  2. JavaScript入门及rhapsody中使用
  3. JBOSS EAP实战(2)-集群、NGINX集成、队列与安全
  4. 装机员U盘安装Win10系统
  5. webpack 热更新原理解析
  6. unittest + HTMLTestRunner
  7. 计算机网络DCF,基于定长时隙多跳Ad HoC计算机网络DCF协议马尔可夫链模型.pdf
  8. Unity 如何检测鼠标双击事件
  9. 日志采集 - Filebeat
  10. 如何对PDF文献做可视化分析?