springboot多数据源
项目中需要访问两个数据库,自然就得使用多数据源了,采用的mybatis,所以就基于mybatis来搞吧,网上教程什么的乱七八糟,上来先贴一大段没有用的代码,能不能只贴关键点?最后还是找到纯洁的微笑大佬的博客来研究的,简直就是我java启蒙老师。先感谢加膜拜下。码云上也有代码地址,拿下来可以直接跑起来。大部分网上搞的代码,搞下来先解决一堆错误,简直吐血。
参考地址:https://www.cnblogs.com/ityouknow/p/6102399.html
1、首先我项目的结构
2、其实重点在于MysqlConfig和SqlserverConfig文件,然后就是mapper用包分开即可,贴代码看下。
package com.example.multidata.datasource; 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.boot.context.properties.ConfigurationProperties; import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Primary; import javax.sql.DataSource; @Configuration // 配置mybatis的接口类放的地方 @MapperScan(basePackages = "com.example.multidata.mappers.mysql", sqlSessionTemplateRef = "mysqlSqlSessionTemplate") public class MysqlConfig { //将这个对象放入Spring容器中 @Bean(name = "mysqlDataSource") //表示这个数据源是默认数据源 @Primary // 读取application.properties中的配置参数映射成为一个对象 // prefix表示参数的前缀 @ConfigurationProperties(prefix = "spring.datasource.mysql") public DataSource getMysqlDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "mysqlSqlSessionFactory") // 表示这个数据源是默认数据源 @Primary //@Qualifier表示查找Spring容器中名字为test1DataSource的对象 public SqlSessionFactory mysqlSqlSessionFactory(@Qualifier("mysqlDataSource") DataSource datasource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(datasource); return bean.getObject(); } @Bean("mysqlSqlSessionTemplate") // 表示这个数据源是默认数据源 @Primary public SqlSessionTemplate mysqlSqlSessionTemplate(@Qualifier("mysqlSqlSessionFactory") SqlSessionFactory sessionfactory) { return new SqlSessionTemplate(sessionfactory); } }
==========================================
package com.example.multidata.datasource; 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.boot.context.properties.ConfigurationProperties; import org.springframework.boot.jdbc.DataSourceBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.sql.DataSource; @Configuration // 配置mybatis的接口类放的地方 @MapperScan(basePackages = "com.example.multidata.mappers.sqlserver", sqlSessionTemplateRef = "sqlserverSqlSessionTemplate") public class SqlserverConfig { //将这个对象放入Spring容器中 @Bean(name = "sqlserverDataSource") // 读取application.properties中的配置参数映射成为一个对象 // prefix表示参数的前缀 @ConfigurationProperties(prefix = "spring.datasource.sqlserver") public DataSource getSqlserverDataSource() { return DataSourceBuilder.create().build(); } @Bean(name = "sqlserverSqlSessionFactory") //@Qualifier表示查找Spring容器中名字为test1DataSource的对象 public SqlSessionFactory sqlserverSqlSessionFactory(@Qualifier("sqlserverDataSource") DataSource datasource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(datasource); return bean.getObject(); } @Bean("sqlserverSqlSessionTemplate") public SqlSessionTemplate test1sqlsessiontemplate(@Qualifier("sqlserverSqlSessionFactory") SqlSessionFactory sessionfactory) { return new SqlSessionTemplate(sessionfactory); } }
总结我犯的错:名称一定仔细检查,不能搞错误了,不然报错,代码不多,检查起来也不难。另外pom千万别忘记添加数据的驱动,我就少添加一个驱动,报错。其余没什么,代码可以直接拿去用。
其余代码不贴了,代码放在码云上想看其他看源码吧。
https://gitee.com/awith/multidata.git
转载于:https://my.oschina.net/uwith/blog/3049905