По данным этого сайта:
http://codenav.org/code.html?project=/org/mybatis/mybatis/3.2.5&path=/Source%20Packages/org.apache.ibatis.session/SqlSessionFactoryBuilder.java
Метод build()
закрывает считыватель / inputtream перед возвратом SqlSessionFactory. Таким образом, вам нужно будет открыть новый читатель / поток для загрузки второго сеанса. Я обнаружил это, когда отделил свои учетные записи / таблицы безопасности от отдельной базы данных от основной базы данных приложения. В первый раз я продолжал получать ошибки, когда бин пытался загрузить фабрику сеансов из-за ошибки входного потока (закрыт).
, например
try {
inputStream = Resources.getResourceAsStream(MYBATIS_CONFIG_PATH);
prodDbSqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream, prodDbEnvironment);
inputStream = Resources.getResourceAsStream(MYBATIS_CONFIG_PATH);
securityDbSqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream, securityDbEnvironment);
} catch (IOException ex) {
String msg = "Unable to get SqlSessionFactory";
CustomizedLogger.LOG(Level.SEVERE, this.getClass().getCanonicalName(), "methodName", msg, ex);
}
Несмотря на то, что я поместил их в отдельные блоки try catch, я точно знаю, какой из них вышел из строя в файле журнала.
Я также реализовал это как синглтон, чтобы он загружал ресурсы только один раз.
Контекст: я запускаю это в контейнере Java EE и использую MyBatis для прямых запросов и для тех мест, где я буду использовать собственные запросы, поскольку это гораздо более простая и понятная среда. Я мог бы переключиться на использование его через JPA везде, но это еще предстоит обсудить.