Spring Boot自定义Starter Jar中@Value注解在依赖项目无法加载
以下是你可能遗漏的配置项及解决办法:
主项目未提供目标属性配置
自定义Starter内部的application.yml仅在单独运行该Jar时生效,当作为依赖引入其他Spring Boot项目后,主项目的配置文件才会成为生效的配置源。你需要在主项目的application.yml(或application.properties)中添加对应的属性配置:myapp: someProperty: 自定义值Spring Boot版本适配的自动配置注册方式
若主项目使用Spring Boot 2.7及以上版本,官方已推荐使用META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件替代spring.factories来注册自动配置类。
在你的Starter项目中,创建src/main/resources/META-INF/spring目录,然后新建org.springframework.boot.autoconfigure.AutoConfiguration.imports文件,内容为:com.test.Myclass(注:旧版本Spring Boot仍支持
spring.factories,但新版本会优先读取上述imports文件)可选:给@Value设置默认值避免异常
如果希望主项目未配置属性时不直接抛出异常,可以为@Value注解添加默认值:@Value("${myapp.someProperty:默认值}") private String someProperty;验证配置类的属性加载时机
若需要在配置类初始化时确认属性是否加载,可添加@PostConstruct方法进行验证,确保属性被正确注入:@Configuration public class Myclass { @Value("${myapp.someProperty}") private String someProperty; @PostConstruct public void init() { // 验证属性是否加载成功 System.out.println("加载的属性值:" + someProperty); } }
内容的提问来源于stack exchange,提问作者Kedar Jog

