Расположение ресурсов конфигурации с tomcat6 и spring3 - PullRequest
0 голосов
/ 12 ноября 2018

У меня есть устаревшее веб-приложение, использующее следующую настройку:

  • Пружина 3.1.0
  • Mybatis 3.0.3
  • Tomcat 6.0.43

Проект развертывает веб-приложение (.war) с несколькими модулями maven (т.е. .jar-зависимостями). Сейчас я пытаюсь позволить Tomcat обнаруживать mybatis mapper .xml как в приложении, так и в зависимостях.

У меня есть следующее определение:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="mapperLocations" value="classpath*:*-mappers.xml" />
</bean>

Это прекрасно работает для обнаружения XML-файлов в модуле, который создается как .war. Если я заменю это абсолютным путем к ресурсам .xml в .jar, это успешно обнаружит эти другие ресурсы:

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="mapperLocations" value="jar:file:/my-repository/my-project/my-app/target/my-app-1.0.0/WEB-INF/lib/my-dependency.jar!/*-mappers.xml" />
</bean>

Однако эта формулировка слишком явная, так как она должна указывать как путь к моим зависимостям в развернутом приложении, так и имя зависимости. Кроме того, эта вторая формулировка исключает ресурсы, найденные в основном веб-приложении.

Итак, мой вопрос: как мне определить мой mapperLocations, чтобы он мог найти ресурсы .xml как в .war-приложении, так и в зависимых .jar-файлах, или полный список зависимостей.

Я отлаживаю содержимое массива, который при запуске поступает в качестве параметра в org.mybatis.spring.SqlSessionFactory.setMapperLocations(Resources[]). Это позволяет мне увидеть, какие файлы mybatis mapper .xml обнаруживаются.

Несколько дополнительных подробностей:

  • Первая ссылка общего пути к классам успешно обнаруживает оба ресурса с помощью tomcat8.
  • Даже с tomcat6 классы из зависимости .jar загружаются нормально. Однако, очевидно, что tomcat6 имеет другой способ разрешения ресурсов по сравнению с classpath.

Обновление: я видел, что PathMatchingResourcePatternResolver не маркирует значение mapperLocations, поэтому предоставление нескольких значений не будет успешно проанализировано.

Update2: я извлек соответствующий вопрос о том, как сделать шаблон пути как относительный путь в отдельном вопросе .

...