我有一个使用以下设置的旧版Web应用程序:
该项目部署具有多个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。
更多详细信息:
更新:我已经看到PathMatchingResourcePatternResolver不会标记mapperLocations
的值,因此提供多个值将无法成功解析。
Update2:我提取了相关的问题,如何在separate question中将路径模式作为相对路径。