非Spring Boot的Spring项目中绑定外部库配置类至application.properties
在非Spring Boot的Spring项目中使用Spring Boot风格的配置属性类
你有一个自己开发的外部JAR,里面的NetworkConfig用了Spring Boot的@ConfigurationProperties注解,现在要在普通Spring项目中让这个类加载application.properties的属性并纳入Spring上下文,下面分两种方案实现:
方案一:修改外部JAR(推荐,更贴合Spring原生用法)
因为你能控制JAR的代码,优先调整NetworkConfig的注解方式,有两种选择:
方式1:改用Spring原生@Value绑定(最轻量化)
去掉Spring Boot专属的@ConfigurationProperties,保留@Component,用@Value逐个绑定属性,同时可指定默认值:
@Component // 如果application.properties不在默认classpath路径,才需要加@PropertySource指定,默认可不写 @PropertySource("classpath:application.properties") public class NetworkConfig { @Value("${test.host}") private String host; @Value("${test.port:8080}") // 冒号后是默认值,配置未定义时生效 private int port; // 必须保留getter和setter方法 // getters/setters }
这样普通Spring项目启动后,会自动把application.properties中test.host、test.port这类属性注入到NetworkConfig实例,且该类会作为Bean被Spring上下文管理。
方式2:保留@ConfigurationProperties批量绑定
如果想保留批量绑定的便捷性(不用给每个属性加@Value),可以做以下调整:
- 修改外部JAR的依赖(以Maven为例):添加Spring Boot配置处理器的编译依赖,不影响运行时:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>
- 在普通Spring项目中添加配置类:手动注册处理
@ConfigurationProperties的必要Bean:
@Configuration public class PropertyBindingConfig { // 处理@ConfigurationProperties注解的核心处理器 @Bean public ConfigurationPropertiesBindingPostProcessor configurationPropertiesBindingPostProcessor() { return new ConfigurationPropertiesBindingPostProcessor(); } // 加载并解析properties文件的处理器 @Bean public static PropertySourcesPlaceholderConfigurer propertySourcesPlaceholderConfigurer() { return new PropertySourcesPlaceholderConfigurer(); } }
保留NetworkConfig原有的@Component和@ConfigurationProperties("test")注解,普通Spring项目就能自动批量绑定test前缀的所有属性。
方案二:不修改外部JAR(兼容方案)
如果不想改动外部JAR代码,就在普通Spring项目中做以下配置:
- 引入必要的Spring Boot依赖:只引入核心模块,排除自动配置避免干扰普通Spring项目:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot</artifactId> <version>替换为你的Spring Boot版本</version> <exclusions> <exclusion> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-autoconfigure</artifactId> </exclusion> </exclusions> </dependency>
- 添加和方案一方式2相同的配置类:注册
ConfigurationPropertiesBindingPostProcessor和PropertySourcesPlaceholderConfigurer。 - 确保配置文件被加载:如果是XML配置的Spring项目,需要添加以下标签加载
application.properties:
<context:property-placeholder location="classpath:application.properties"/>
注解驱动的项目默认会自动加载classpath下的application.properties,无需额外配置。
注意事项
- 无论哪种方案,
NetworkConfig类的属性必须有对应的getter和setter方法,Spring通过setter注入属性值。 - 使用
@ConfigurationProperties时,属性名遵循驼峰转短横线的匹配规则,比如类中private String serverHost对应配置文件中的test.server-host。
内容的提问来源于stack exchange,提问作者Ilja S.
相关产品推荐
相关产品推荐

