使用tomcat6和spring3查找配置资源

时间:2018-11-12 14:03:33

标签: tomcat6 spring-3 spring-mybatis

我有一个使用以下设置的旧版Web应用程序:

  • 春季3.1.0
  • Mybatis 3.0.3
  • Tomcat 6.0.43

该项目部署具有多个Maven模块(即.jar依赖项)的Web应用程序(.war)。现在,我正在努力让Tomcat在应用程序和依赖项中都检测到mybatis映射器.xml。

我有以下定义:

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

这对于在正在构建为.war的模块中检测.xml很好。如果将其替换为.jar中.xml资源的绝对路径,则可以成功检测到以下其他资源:

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

但是,这种表述太明确了,因为它既需要指向部署的应用程序中我的依赖项的路径,也要指向依赖项名称。此外,第二种表述排除了在主Web应用程序中找到的资源。

所以我的问题是:我应该如何定义mapperLocations,以便它可以在.war应用程序和相关的.jar文件或完整的依赖项列表中找到.xml资源。

我正在调试启动时作为org.mybatis.spring.SqlSessionFactory.setMapperLocations(Resources[])中的参数到达的数组的内容。这使我可以看到正在检测到哪些mybatis映射器.xml。

更多详细信息:

  • 第一个通用类路径引用使用tomcat8成功检测到两个资源位置。
  • 即使使用tomcat6,也可以很好地加载.jar依赖中的类。但是,显然tomcat6具有从类路径解析资源的另一种方式。

更新:我已经看到PathMatchingResourcePatternResolver不会标记mapperLocations的值,因此提供多个值将无法成功解析。

Update2:我提取了相关的问题,如何在separate question中将路径模式作为相对路径。

0 个答案:

没有答案
相关问题