You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring多模块应用中子模块属性无法加载问题求助

解决子库无法获取父应用Spring Cloud Config属性的问题

排查步骤与解决方案

1. 先验证父应用的配置加载是否正常

  • 在父应用中添加测试代码,确认Config Server的配置已成功加载到Spring环境:
    @RestController
    public class TestController {
        @Value("${smsservice.oauth-token}")
        private String testToken;
    
        @GetMapping("/test-token")
        public String getToken() {
            return testToken;
        }
    }
    
  • 访问接口验证结果:
    • 若返回正确值,说明父应用配置无问题;
    • 若报错,优先排查Config Server相关配置:
      • 确认Config Server中parent-app-dev.yml(对应环境的配置文件)确实包含smsservice.oauth-token属性
      • 检查父应用bootstrap.yml中spring.cloud.config.uri是否指向正确的Config Server地址
      • 确保父应用已引入spring-cloud-starter-config依赖,否则bootstrap.yml不会生效

2. 替换@Value为@ConfigurationProperties(推荐方案)

@Value在跨模块场景下易出现属性加载时机不匹配问题,改用@ConfigurationProperties更稳定:

子库中创建配置类

@Data
@ConfigurationProperties(prefix = "smsservice")
public class SmsServiceProperties {
    private String oauthToken; // 对应配置文件中的smsservice.oauth-token
    private String proxyAddress = "https://api.smsapi.pl/"; // 默认值
}

子库中创建自动配置类

@Configuration
@EnableConfigurationProperties(SmsServiceProperties.class)
public class SmsLibAutoConfiguration {

    @Bean
    public SmsMessageService smsMessageService(SmsServiceProperties properties) {
        SmsMessageService service = new SmsMessageService();
        service.setOauthToken(properties.getOauthToken());
        service.setProxyAddress(properties.getProxyAddress());
        return service;
    }
}

修改子库的SmsMessageService

去掉@Value和@Service,改为通过Setter注入配置:

@Slf4j
public class SmsMessageService {
    private String oauthToken;
    private String proxyAddress;

    public void setOauthToken(String oauthToken) {
        this.oauthToken = oauthToken;
    }

    public void setProxyAddress(String proxyAddress) {
        this.proxyAddress = proxyAddress;
    }

    // 业务方法...
}

启用子库自动配置

在子库的src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件中添加:

com.yourpackage.SmsLibAutoConfiguration

(替换为实际的自动配置类全类名)

3. 检查属性名称匹配度

仔细核对Config Server中的属性键与子库使用的键完全一致,@ConfigurationProperties会自动处理smsservice.oauth-token到oauthToken的驼峰转换。

4. 确保子库Bean被正确扫描(若坚持用@Service+@Value)

修改父应用启动类的@ComponentScan,包含子库的包路径:

@SpringBootApplication
@ComponentScan(basePackages = {"com.parentapp", "com.childlib"})
public class ParentAppApplication {
    public static void main(String[] args) {
        SpringApplication.run(ParentAppApplication.class, args);
    }
}

内容的提问来源于stack exchange,提问作者danny

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 00:52:31