文档章节

Play Framework 2.5 整合 MyBatis —— 多数据源

芝麻糖葫芦
 芝麻糖葫芦
发布于 2017/07/21 18:24
字数 258
阅读 238
收藏 1

接上一篇博客:Play Framework 2.5 整合 MyBatis

在整合 MyBatis 的基础上,如果想要使用多个数据源的话,就不是增加一个 Module 那么简单了。

如果我们在上一步的基础上,再加一个 Module ,提供不同的 DataSourceProvider ,会提示下面这个错误:

1) A binding to javax.sql.DataSource was already configured at org.mybatis.guice.MyBatisModule.bindDataSourceProvider(MyBatisModule.java:328) (via modules: com.google.inject.util.Modules$OverrideModule -> module.PlayMyBatisModule2).

同样参考 MyBatis 官方整合 Guice 的文档 Multiple Datasources 部分

需要使用 PrivateModule 再封装一层:

package module;

import com.google.inject.Key;
import com.google.inject.PrivateModule;
import com.google.inject.Provider;
import org.apache.ibatis.io.ResolverUtil;
import org.apache.ibatis.transaction.jdbc.JdbcTransactionFactory;
import org.mybatis.guice.MyBatisModule;
import play.db.Database;
import play.db.NamedDatabaseImpl;

public class PlayMyBatisModule1 extends PrivateModule {
    @Override
    protected void configure() {
        install(new MyBatisModule() {
            @Override
            protected void initialize() {
                environmentId("default");
                Provider<Database> provider = binder().getProvider(Key.get(Database.class, new NamedDatabaseImpl("my-db1")));
                bindDataSourceProvider(() -> provider.get().getDataSource());
                bindTransactionFactoryType(JdbcTransactionFactory.class);

                addMapperClasses("com.morven.product.mapper.db1");
            }
        });
        // 利用 MyBatis 的工具类,获取 Dao 包路径下所有的 class 并暴露到 Guice 全局环境中
        new ResolverUtil<>()
                .find(new ResolverUtil.IsA(Object.class), "com.morven.product.mapper.db1")
                .getClasses()
                .forEach(PlayMyBatisModule2.this::expose);
    }
}

注意:

  • 如果不在 install 方法后面调用 expose 把 Dao 类暴露到全局环境,Controller 或 Service 会获取不到 Dao

© 著作权归作者所有

共有 人打赏支持
芝麻糖葫芦
粉丝 3
博文 20
码字总数 5238
作品 0
济南
高级程序员
私信 提问
Play 1.x 学习资料汇总

1.Play!Framework学习笔记:初识Play(http://blog.csdn.net/w302974215/article/details/46926007) 2.Play Framework入门引导(http://somefuture.iteye.com/blog/1985667) 3.Play框架1.2.7版......

IT追寻者
2016/07/22
43
0
分布式事务开源解决方案用例版--hihsoft-atomikos

【组件价值】 Atomikos 是一款 Java/JTA 事务处理工具 与spring完美结合,实现配置化分布式事务 多数据源分布式事务的开源解决方案 跨平台,不受应用服务器限制 也是学习spring、mybatis、j...

平凡哥
2014/08/07
1K
1
mybatis3 配置文件解析

配置文件的基本结构 configuration —— 根元素 environment transactionManager —— 事务管理器 dataSource —— 数据源 properties —— 定义配置外在化 settings —— 一些全局性的配置 ...

北方攻城师
2014/08/02
0
0
精通Spring Boot——第十三篇:整合Mybatis多数据源

久违了,最近度过了一段倦怠期,这段时间干什么都没有动力,拖延症复发。好在我回来了.... ——From me .进入今天的主题——在Spring Boot 项目中整合mybatis多数据源,其实很简单,其实并不...

developlee的潇洒人生
2018/10/23
0
0
Play!2.1 通过JPA连接多个数据库

Play framework连接多数据库很简单。 但是这个很简单耗费了我整整两天的时间来找到这个答案。 还好苍天,我还是找到了。 ============================================================= Pl...

davelet
2013/12/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Cloud搭建微服务架构----流量回放

前言 系统微服务化后,传统的自测/测试方式都变得比较困难: 依赖的服务可能不稳定。 服务无法提供期望的响应数据。 缺少场景构造标准。 随着整体业务越来越复杂,微服务依赖的越来越多,测试...

春哥大魔王的博客
32分钟前
3
0
记一次springboot模块配置问题导致读取Apollo配置中心配置文件始终错误的问题

现在正在做的一个项目采用的是微服务,主框架是spring cloud,配置中心用的是携程的Apollo。 项目下有多个服务,在测试服务器上启动用户服务的时候发现在eureka中心另一个服务被启动了,尝试...

zcqshine
33分钟前
6
0
流处理和批处理框架的异同

分布式流处理需求日益增加,包括支付交易、社交网络、物联网(IOT)、系统监控等。业界对流处理已经有几种适用的框架来解决,下面我们来比较各流处理框架的相同点以及区别。 分布式流处理是对...

hblt-j
36分钟前
4
0
spring cloud 面试题

什么是springboot 用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置(properties或yml文件) 创建独立的spring引用程序 main方法运行 嵌入的Tomcat 无需部署war文件 简化...

狼王黄师傅
38分钟前
4
0
前嗅ForeSpider教程:采集黄页88

以黄页88为例,采集当前列表页新闻的正文数据: 第一步:新建任务 ①点击左上角“加号”新建任务,如图1: 【图1】 ②在弹窗里填写采集地址,任务名称,如图2: 【图2】 ③点击下一步,选择进...

forespider
42分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部