фон
Недавно проект собирается запустить, и необходимо разработать программу миграции данных. Основная функция программы - запросить данные в одной базе данных и импортировать их в другую базу данных после серии обработки. Учитывая удобство и скорость развития. Естественно, я думал об интеграции с весной и мибатисом. Даже использование автоматического генерации кода Mybatis может сэкономить много разработок слоев DAO.
Яма интеграции
Предыдущий проект: у меня была такая аналогичная программа раньше, поэтому я напрямую использовал конфигурацию интеграции Spring и Mybatis для ее изменения. Предыдущая интегрированная конфигурация заключается в следующем:
1. Учитывая конфигурируемость URL -адреса базы данных и имя пользователя и пароль, поместите эту информацию в файл свойств. Используется в файле конфигурации пружины
<Контекст: Property Placeholder location = "classPath: config.properties" />
2. Интегрированная конфигурация mybatis и пружины в файле конфигурации пружины похожа на это
<bean id = "sqlSessionFactory"> <name = "dataSource" ref = "dataSource" /> < /bean> <bean> <name = "basepackage" value = "com.lagou.chat.record.transfer.dao" /> < /bean>
Нет проблем с вышеуказанной конфигурацией. Так что просто скопируйте конфигурацию в новый проект
Текущий проект: скопируйте конфигурацию старого проекта, но новый проект должен подключиться к двум базам данных, поэтому необходимы два источника данных (запись и IM), поэтому старая конфигурация изменена следующим образом
1. Конфигурация использования файлов свойств остается неизменной
2. Ранее, поскольку был только один источник данных (A SQLSessionFactory), <name = name = "sqlSessionFactory" ref = "sqlSessionFactory"/> не было настроено в соответствии с MapperScannerConfigurer. Потому что используется SQLSessionFactory SQLSessionFactory. Но теперь есть два источника данных, не указание их определенно приведет к путанице. Таким образом, конфигурация изменена следующим образом
<bean id = "record_sqlsessionFactory"> <name = "dataSource" ref = "record_datasource" /> < /bean> <bean id = "config1"> <name = "basepackage" value = "com.xxx.util.rollback.record.dao" /> <properation = "sqlfactory" reffactory. refcescessecred. /> < /bean> <bean id = "im_sqlSessionFactory"> <name = "dataSource" ref = "im_datasource" /> < /bean> <bean id = "config2"> <свойство = "basepackage" value = "com.xx.util.rollback.im.dao" /> <property name = "sqry.Util.Rollback.im.dao" /> <property value = "squ.Util.Rollback.Im.Dao" /> <fstirt ref = "im_sqlSessionFactory" /> < /bean>
Результатом является то, что при запуске нового проекта свойства, такие как $ {jdbc.url}, $ {jdbc.name} в файле конфигурации пружины, не могут быть заменены указанными значениями в свойствах. Сначала я, естественно, не ожидал, что это было из -за интеграции Spring и Mybatis, поэтому я продолжал проверять, был ли файл конфигурации пружины неправильным, был ли файл свойств неправильным, независимо от того, не был ли файл свойств, не был ссылался или файл свойств не был составлен в каталог класса и т. Д., Конечно, если анализ не анализирует проблему, это натурально невозможным для решения решения. Я должен был обратиться в Интернет. Наконец нашел ответ
Фиксированный метод: изменить конфигурацию на следующее, проблема была решена:
<bean id = "record_sqlsessionFactory"> <name = "dataSource" ref = "record_datasource" /> < /bean> <bean id = "config1"> <name = "basepackage" value = "com.xxx.util.rollback.record.dao" /> <properation nely = "sqlsectionfactactory.record.dao" /> <properation = "sqlSessionFactory. value = "record_sqlSessionFactory" /> < /bean> <bean id = "im_sqlsessionFactory"> <name = "dataSource" ref = "im_datasource" /> < /bean> <bean id = "config2"> <propament = "basepackage" value " name = "sqlSessionFactoryBeanName" value = "im_sqlSessionFactory"/> </bean>
Это изменить свойство SQLSessionFactory на SQLSessionFactoryBeanName. Конечно, ссылка также должна быть изменена на стоимость. Потому что свойство sqlSessionFactoryBeanName - это тип строки
причина
При использовании org.mybatis.spring.mapper.mapperscannerConfigurer для автоматического сканирования весной, если установлено SQLSessionFactory, PropectyPlaceHOLDERCONFIGURURE может быть недействительным, то есть выражения, такие как $ {JDBC.USERNAME}, не сможет получить содержимое в файле PretsERES.
Это связано с тем, что MappersCannerConigurer на самом деле находится на стадии определения бобов. Если вы установите SQLSessionFactory в настоящее время, это приведет к тому, что некоторые классы будут инициализироваться заранее. В настоящее время у PropertyplaceholderConfigurer не было времени заменить переменные в определении, что приводит к копированию выражения в виде строки. Однако, если свойство SQLSessionFactory не установлено, необходимо убедиться, что имя SessionFactory в Spring должно быть SQLSessionFactory, в противном случае оно не будет автоматически вводить.
Вышеуказанное-ловушки Spring, интегрирующую Mybatis при использовании <context: property-placeholder>, которые я представил вам. Я надеюсь, что это будет полезно для вас. Если у вас есть какие -либо вопросы, пожалуйста, оставьте мне сообщение, и редактор ответит вам вовремя. Большое спасибо за вашу поддержку сайту wulin.com!