必须使用@conditionalonresource注解且资源须在classpath下,如src/main/resources;支持单个或多个classpath路径,全部存在才生效;通过debug日志和断点验证是否加载。

要在Spring Boot中让某个配置类或Bean仅在指定资源存在时才加载,必须使用@ConditionalOnResource注解并确保资源路径被正确识别为classpath路径。
确认资源必须位于classpath下
@ConditionalOnResource只检查【classpath】中的资源,不支持文件系统绝对路径或外部配置目录。如果你把my-config.properties放在src/main/resources目录下,它就会自动进入classpath;若放在target/classes外的任意位置,注解将始终判定为“不存在”。
这一步不可跳过——哪怕文件物理存在,只要不在编译后classes目录或依赖jar包内,matches()方法就返回false,整个配置类直接被跳过。
在配置类上添加注解
方法一:单个资源判断
@ConditionalOnResource(resources = "classpath:application.yml")
public class AppConfig { ... }
方法二:多个资源同时存在才生效
@ConditionalOnResource(resources = {"classpath:schema.sql", "classpath:data.sql"})
public class DatabaseInitConfig { ... }
注意:数组中所有路径都必须存在,条件才算满足;缺一个,整个注解判为不匹配。
验证资源是否真被加载
第一步:启动应用时开启DEBUG日志级别,在application.properties中加入
logging.level.org.springframework.boot.autoconfigure=DEBUG
第二步:观察控制台输出,搜索关键词OnResourceCondition —— 若看到"matched"字样,说明资源被识别成功;若出现"did not match",则说明路径写错、文件未编译进classes、或拼写大小写不一致(Linux/Unix环境严格区分大小写)。
第三步:在配置类中加一个@Bean并设断点,运行调试模式;如果断点未触发,证明@ConditionalOnResource已拦截该类加载。










