文档章节

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

芝麻糖葫芦
 芝麻糖葫芦
发布于 2017/07/21 18:24
字数 258
阅读 205
收藏 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
博文 19
码字总数 4908
作品 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
spring boot入门-2

时光荏苒,岁月如梭,距离我上次写的spring-boot入门1已经过去了好长的时间了,就这么一段时间里面,spring boot有发生了很多的新的变化.在配置方面更加的简化. 使用spring boot能更加简单的进行...

u010398771
2017/12/24
0
0
整合Spring SpringMVC MyBatis

1.介绍 Spring就没什么好介绍的了。 SpringMVC:http://my.oschina.net/ChiLin/blog/693486 MyBatis: MyBatis is a first class persistence framework with support for custom SQL, stor......

蜡笔小小小新
2016/06/08
706
3
mybatis3 配置文件解析

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

北方攻城师
2014/08/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

js 操作cookie

var cookie = {// 设置cookie方法set:function(key, val, time){// 获取当前时间var date = new Date();// 将date设置为n天以后的时间var expiresDays = time;//...

小丶二
32分钟前
1
0
限制root远程登录 su和sudo命令

9月21日任务 3.7 su命令 3.8 sudo命令 3.9 限制root远程登录 对于Linux而言,权限的重要性毋庸置疑!对于普通用户而言无法执行那些只有root用户才能有效的命令,导致工作无法有效进行; 系统...

robertt15
34分钟前
2
0
MQTT协议的初浅认识之通讯级别和持久会话

背景 这是我最近了解MQTT协议的最后一部分内容了,MQTT协议里面的QOS和Keep Alive是两个比较重要的内容。QOS的设置,直接影响了订阅客户端与中间件之间的消息交互行为。而Keep Alive直接影响...

亚林瓜子
36分钟前
2
0
calc

width: calc(100% - 30px); 特别注意:减号左右空格,均不能去掉。 width: calc(100% - 30px);

柴高八斗之父
44分钟前
1
0
Spring Cloud Gateway全局过滤器GlobalFilter:返回消息和重定向

Spring Cloud Gateway的全局过滤器GlobalFilter,顾名思义,声明后会对所有的请求生效,可以用来做权限控制,这里简单记录一下拦截到非法请求后如何返回自定义信息和将请求重定向到指定URL。...

夜雨寄北09
46分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部