首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >gradle项目多模块中主模块加载子模块中的sqlmapper文件方法

gradle项目多模块中主模块加载子模块中的sqlmapper文件方法

作者头像
oktokeep
发布2025-09-17 08:24:11
发布2025-09-17 08:24:11
7700
代码可运行
举报
文章被收录于专栏:第三方工具第三方工具
运行总次数:0
代码可运行

gradle项目多模块中主模块加载子模块中的sqlmapper文件方法

1.子模块 build.gradle sourceSets.main.resources { srcDirs = ["src/main/resources", "src/main/java"] // 包含Java目录下的XML文件 includes = ["**/*.xml"] // 明确包含XML文件 }

2.主模块 build.gradle compile project(":subModel:subModel-api") compile project(":subModel:subModel-service") implementation project(":subModel:subModel-api") implementation project(":subModel:subModel-service") 3.application.properties mybatis.mapper-locations=classpath*:mybatis/myProject/*.xml, classpath*:mybatis/**/*.xml

4.多数据源配置【关键】 @Bean(name = "scooterSqlSessionFactory") public SqlSessionFactory sentinelSqlSessionFactory(@Qualifier("scooterDataSource") DataSource dataSource) throws Exception { SqlSessionFactoryBean bean = new SqlSessionFactoryBean(); bean.setDataSource(dataSource); bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mybatis/myProject/*.xml")); return bean.getObject(); }

5.gradle clean build -x test --refresh-dependencies

gradle会编译失败: 使用根项目下的 gradlew D:\git\tengxunyunNew\myProject>gradlew clean build -x test --refresh-dependencies

"classpath*:mybatis/myProject/*.xml" "classpath:mybatis/myProject/*.xml" 区别~!

代码语言:javascript
代码运行次数:0
运行
复制
在加载SQL Mapper文件时,classpath:和classpath*:的主要区别体现在资源查找范围和加载行为上:
1. 查找范围差异
‌classpath:‌
仅从当前模块的类路径(如target/classes目录)中查找资源,且只返回第一个匹配到的资源文件。
例如配置classpath:mapper/*.xml时,若多个模块存在同名文件,只会加载第一个被扫描到的文件。

‌*classpath:**‌
会递归扫描所有类路径(包括当前模块和依赖的JAR包),返回所有匹配的资源文件。
适用于需要聚合多模块资源的场景,如classpath*:mapper/**/*.xml会加载所有模块中匹配路径的XML文件。
	
2. 性能影响
classpath*:需要遍历所有类路径,性能低于classpath:,尤其在依赖较多时差异明显。建议在明确需要跨模块加载时才使用classpath*:

3. 典型应用场景
‌单一资源加载‌
使用classpath:,如指定唯一配置文件:@PropertySource("classpath:config.properties")。

‌多模块资源聚合‌
使用classpath*:,例如MyBatis需加载分散在多个JAR中的Mapper文件:mybatis.mapper-locations=classpath*:mapper/*.xml。

4. 注意事项
‌同名文件处理‌
classpath:可能因加载顺序导致预期外的文件被选中,而classpath*:会加载所有同名文件,需确保逻辑兼容性。
‌路径规范‌
避免在资源路径中使用通配符时混用两种前缀,可能引发不可预期的行为。
通过合理选择前缀可精准控制资源加载范围,避免因配置不当导致的文件遗漏或重复加载问题
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-09-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档