java-MyBatis-guice 3.3多个数据源属性scriptrunner

我正在使用MyBatis-guice 3.3使用Java Properties对象和ScriptRunner连接到第一个数据库,以运行一些脚本:

 

 

Environment environment = injector.getInstance(SqlSessionFactory.class).getConfiguration().getEnvironment();
DataSource source = environment.getDataSource();
ScriptRunner runner = new ScriptRunner(source.getConnection());
runner.setLogWriter(null);
runner.setStopOnError(true);
runner.runScript(Resources.getResourceAsReader(properties.getProperty("script.dbA.create.schema")));

现在,我想使用相同的方法添加第二个数据源(dbB).按照MyBatis-guice参考指南,我必须使用2 PrivateModule.这部分工作正常.

但是,我该如何调用ScriptRunner来为dbA运行某些脚本,为dbB运行其他脚本?

最佳答案

创建2个限定符注释@DbA和@DbB或类似的注释.

 

现在每个私有模块都将调用(通过MyBatisModule)

 

binder().bind(SqlSessionFactory.class).toProvider(SqlSessionFactoryProvider.class).in(Scopes.SINGLETON);

这意味着不可能做

 

expose(SqlSessionFactory.class).annotatedWith(DbA.class);

那将需要

 

binder().bind(SqlSessionFactory.class).annotatedWith(DbA.class).toProvider(SqlSessionFactoryProvider.class).in(Scopes.SINGLETON);

相反,您需要提供一个中间类,该中间类被SqlSessionFactory注入,并带有限定符注释.

并在每个专用模块中执行以下操作

 

bind(MyBatisEnv.class).to(MyBatisImpl.class).annotatedWith(DbX.class);
expose(MyBatisEnv.class).annotatedWith(DbX.class);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值