7-Spring-Boot七:springboot+mybatis多数据源最简解决方案
起多数据源, 一般都来解决那些问题呢,主从模式或者业务比较复杂需要连接不 同的分库来支持业务。我们项目是后者的模式,网上找了很多,大都是根据jpa 来做多数据源解决方案,要不就是老的 spring 多数据源解决方案,还有的是利 用 aop 动态切换,感觉有点小复杂,其实我只是想找一个简单的多数据支持而 已,折腾了两个小时整理出来,供大家参考。 废话不多说直接上代码吧 配置文件配置文件 pom 包就不贴了比较简单该依赖的就依赖,主要是数据库这边的配置 mybatis.config-locationsclasspathmybatis/mybatis-config.xml spring.datasource.test1.driverClassName com.mysql.jdbc.Driverspring.datasource.t est1.url jdbcmysql//localhost3306/test1useUnicodetrue; } } BeanBean name “test1SqlSessionFactory“ PrimaryPrimary publicpublic SqlSessionFactory testSqlSessionFactorytestSqlSessionFactory QualifierQualifier “test1DataSource “ DataSource dataSource throwsthrows Exception { { SqlSessionFactoryBean bean newnew SqlSessionFactoryBean;; bean. .setDataSource dataSource; ; bean. .setMapperLocationsnewnew PathMatchingResourcePatternResolver..ge tResources “classpathmybatis/mapper/test1/*.xml“;; returnreturn bean. .getObject;; } } BeanBean name “test1TransactionManager“ PrimaryPrimary publicpublic DataSourceTransactionManager testTransactionManagertestTransactionManager QualifierQualifier “t est1DataSource“ DataSource dataSource { { returnreturn newnew DataSourceTransactionManagerDataSourceTransactionManager dataSource; ; } } BeanBean name “test1SqlSessionTemplate“ PrimaryPrimary publicpublic SqlSessionTemplate testSqlSessionTemplatetestSqlSessionTemplate QualifierQualifier “test1SqlSessi onFactory“ SqlSessionFactory sqlSessionFactory throwsthrows Exception { { returnreturn newnew SqlSessionTemplateSqlSessionTemplate sqlSessionFactory; ; } } } } 最关键的地方就是这块了,一层一层注入,先创建 DataSource,在创建 SqlSessionFactory 在创建事务,最后包装到 SqlSessionTemplate 中。其中需 要制定分库的 mapper 文件地址,以及分库到层代码 MapperScanMapperScan basePackages “com.neo.mapper.test1“, , sqlSessionTemplateRef “test1SqlSessionTemplate“ 这块的注解就是指明了扫描 dao 层,并且给 dao 层注入指定的 SqlSessionTemplate。所有Bean都需要按照命名指定正确。 daodao 层和层和 xmlxml 层层 dao 层和 xml 需要按照库来分在不同的目录,比如test1 库 dao 层在 com.neo.mapper.test1 包下,test2 库在 com.neo.mapper.test1 publicpublic interfaceinterface User1MapperUser1Mapper { { List getAllgetAll;; UserEntity getOnegetOne Long id; ; voidvoid insertinsert UserEntity user; ; voidvoid updateupdate UserEntity user; ; voidvoid deletedelete Long id; ; } } xml 层 id, userName, passWord, user_sex, nick_name SELECT FROM users SELECT FROM users WHERE id {id} INSERT INTO users userName,passWord,user_sex VALUES {userName}, {passWord}, {userSex} UPDATE users SET userName {userName}, passWord {passWord}, nick_name {nickName} WHERE id {id} DELETE FROM users WHERE id {id} 测试测试 测试可以使用 SpringBootTest,也可以放到 Controller 中, 这里只贴 Controller 层的使用 RestControllerRestControllerpublicpublic classclass UserControllerUserController { { AutowiredAutowired privateprivate User1Mapper user1Mapper; ; AutowiredAutowired privateprivate User2Mapper user2Mapper; ; RequestMappingRequestMapping “/getUsers“