@ConditionalOnResource注解需精准识别资源路径:推荐用classpath:开头的相对路径(如classpath:config.yml),禁用反斜杠、前导斜杠或点号;绝对路径仅限调试,且需确保文件真实存在;常见错误包括路径格式错误、扩展名缺失及资源未编译进classes目录。

在Spring Boot中使用@ConditionalOnResource注解时,必须让Spring能准确识别资源是否存在,路径写错会导致条件判断永远不生效或抛出异常。
相对路径写法(推荐)
直接写类路径下的相对路径,以classpath:开头,斜杠用正斜杠/,不加前导斜杠。
在application.properties同级目录放config.yml → 写成 【classpath:config.yml】
在resources/static/js下放main.js → 写成 【classpath:static/js/main.js】
注意:不能写成 classpath:/static/js/main.js 或 classpath:./static/js/main.js,Spring会找不到。
绝对路径写法(慎用)
方法一:用file:协议指向文件系统绝对路径
写成 file:/opt/app/config.properties
这一步操作起来很简单,但仅限开发环境调试,打包后部署到其他服务器时路径必然失效。
方法二:用系统属性动态拼接
@ConditionalOnResource(resources = "file:${user.home}/.myapp/settings.json")
注意:${user.home}必须真实存在该文件,否则条件不满足;Spring不会自动创建父目录。
常见错误路径写法
第一步:检查是否误用了Windows风格反斜杠 → 错误示例:classpath:conf\app.cfg
第二步:确认是否漏掉了扩展名 → 错误示例:classpath:application(实际是application.yml)
第三步:验证路径是否在编译后仍存在于target/classes或jar包内 → 若文件放在src/main/java下,Maven默认不复制到classes目录,【@ConditionalOnResource对此类路径始终判定为不存在】
















