我有一个以cron身份运行的java应用程序。它使用MyBatis。在我的mybatis-config.xml中,我有
<environments default="staging">
<environment id="prod_read">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://192.168.10.2:3306/myDB"/>
<property name="username" value="dbuser"/>
<property name="password" value="dbpass"/>
</dataSource>
</environment>
<environment id="prod_write">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://192.168.10.1:3306/myDB"/>
<property name="username" value="dbuser"/>
<property name="password" value="dbpass"/>
</dataSource>
</environment>
<environment id="staging">.....
</environments>
所以,我在生产中使用了2个DB - 一个用于读取从属,一个用于写入主。
在代码中,SqlSessionFactory的初始化就像这样
InputStream rd = this.getClass().getClassLoader()
.getResourceAsStream(mybatisConfigXml);
try {
sessionFactory_read = new SqlSessionFactoryBuilder().build(rd, Main.DB_ENV + "_read");
sessionFactory_write = new SqlSessionFactoryBuilder().build(rd, Main.DB_ENV + "_write");
}catch (final Exception e) {
e.printStackTrace();
}
当此代码运行时,我在 _write 初始化时收到异常,并显示消息
org.apache.ibatis.exceptions.PersistenceException:
### Error building SqlSession.
### Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance. Cause: java.io.IOException: Stream closed
如何解决此问题?它正在谈论哪个流被关闭?我应该创建2个InputStream实例(rd1,rd2)并在2个SqlSessionFactory初始化中使用它们吗? 我检查了数据库凭据,他们没事。 提前谢谢。