编程语言
首页 > 编程语言> > java-MyBatis-guice 3.3多个数据源属性scriptrunner

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);

标签:datasource,guice,mybatis,java
来源: https://codeday.me/bug/20191123/2066103.html