文档章节

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

MorvenHou
 MorvenHou
发布于 2017/07/21 18:24
字数 258
阅读 894
收藏 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
MorvenHou
粉丝 4
博文 16
码字总数 4708
作品 0
济南
高级程序员
私信 提问
加载中
请先登录后再评论。
访问安全控制解决方案

本文是《轻量级 Java Web 框架架构设计》的系列博文。 今天想和大家简单的分享一下,在 Smart 中是如何做到访问安全控制的。也就是说,当没有登录或 Session 过期时所做的操作,会自动退回到...

黄勇
2013/11/03
3.5K
8
我的架构演化笔记 功能1: 基本的用户注册

“咚咚”,一阵急促的敲门声, 我从睡梦中惊醒,我靠,这才几点,谁这么早, 开门一看,原来我的小表弟放暑假了,来南京玩,顺便说跟我后面学习一个网站是怎么做出来的。 于是有了下面的一段...

强子哥哥
2014/05/31
976
3
树莓派(Raspberry Pi):完美的家用服务器

自从树莓派发布后,所有在互联网上的网站为此激动人心的设备提供了很多有趣和具有挑战性的使用方法。虽然这些想法都很棒,但树莓派( RPi )最明显却又是最不吸引人的用处是:创建你的完美家用...

异次元
2013/11/09
7.2K
8
数据库代码辅助工具--MaoCaiJun.Database

MaoCaiJun.DataBase 是一个用于 Microsoft Visual Studio 的数据库代码生成组件。它是基于 xml 文件的代码创建工具,支持sql2000,sql2005,sql2008,access, SQLite MaoCaiJun.Database 数据库...

mccj
2013/02/06
2.4K
1
Javascript图元绘制库--ternlight

基于HTML CANVAS API的Javascript库,提供在HTML页面上绘制图元——如流程图的能力。 目前已支持简单的矩形图元和图元间的连线(直线、直角连线两种),拖拽图元等能力。 该javascript librar...

fancimage1
2013/02/07
6.3K
1

没有更多内容

加载失败,请刷新页面

加载更多

Hacker News 简讯 2020-08-12

最后更新时间: 2020-08-12 00:01 Single Page Applications using Rust - (sheshbabu.com) 使用Rust的单页应用程序 得分:126 | 评论:68 The case for why Google should be regulated as a ......

FalconChen
11分钟前
19
0
在关系数据库中存储分层数据有哪些选择? [关闭]

问题: Good Overviews 良好的概述 Generally speaking, you're making a decision between fast read times (for example, nested set) or fast write times (adjacency list). 一般来说,您......

fyin1314
昨天
7
0
创建myBatis项目

1、简介 1.1、核心组件 SqlSessionFactoryBuilder(构造器):根据配置信息或者代码生成SqlSessionFactory SqlSessionFactory(工厂接口):依靠工厂来生成SqlSession(会话) SqlSession(会话): ...

执键走天涯
昨天
5
0
Tomcat集群带来的问题和解决思路

Tomcat集群 存在问题 解决方案 基于Redis+Cookie+Jackson+Filter的原生解决集群Session共享问题 使用Spring Session零侵入解决Session共享 单点登录实现 Redis构建Session服务器 使用Redis+C...

code-ortaerc
昨天
17
0
小福利

点击有福利 本文分享自微信公众号 - V5codings(gh_c1ec2d16ec93)。 如有侵权,请联系 support@oschina.cn 删除。 本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。...

V5codings
2019/11/19
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部