Play Framework 2.5 整合 MyBatis —— 多数据源
Play Framework 2.5 整合 MyBatis —— 多数据源
芝麻糖葫芦 发表于6个月前
Play Framework 2.5 整合 MyBatis —— 多数据源
  • 发表于 6个月前
  • 阅读 157
  • 收藏 1
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购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
博文 15
码字总数 3383
×
芝麻糖葫芦
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: