是否有仅用于加载配置属性的Spring组件及对应Maven Starter?
关于Spring配置属性加载组件与普通Java应用实现方案
1. 专门用于加载配置属性的Spring组件
Spring核心生态里有成熟的组件负责配置属性的加载与绑定:
@ConfigurationProperties:核心注解,能将properties/yaml文件中的属性直接绑定到Java对象,支持嵌套结构、自动类型转换、JSR-380校验等特性。PropertySourcesPlaceholderConfigurer:Spring核心Bean,负责解析${}占位符,同时支持加载多源配置(properties文件、环境变量、系统属性等)。Environment接口:提供统一的配置访问入口,可跨来源获取配置值,也支持占位符解析。
2. 轻量的Maven坐标(无冗余Spring Boot特性)
如果只需要配置读取与对象绑定的核心功能,无需Spring Boot的Web、自动配置等额外特性,可引入以下依赖:
<!-- Spring核心上下文,提供配置加载基础能力 --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>5.3.29</version> <!-- 选择稳定兼容版本即可 --> </dependency> <!-- 编译期依赖,生成配置元数据,支持IDE提示(可选) --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <version>2.7.14</version> <!-- 与spring-context版本兼容即可 --> <optional>true</optional> </dependency>
3. 普通Java应用实现Spring Boot式属性读写的可行性
完全可行,实现步骤如下:
- 步骤1:编写配置属性类
@ConfigurationProperties(prefix = "app") public class AppProperties { private String name; private int port; private Database db; // 嵌套配置类 public static class Database { private String url; private String username; // getter、setter方法 public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } } // 顶层属性的getter、setter方法 public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPort() { return port; } public void setPort(int port) { this.port = port; } public Database getDb() { return db; } public void setDb(Database db) { this.db = db; } } - 步骤2:配置Spring上下文
import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.support.PropertySourcesPlaceholderConfigurer; import org.springframework.core.io.ClassPathResource; @Configuration public class AppConfig { // 注册配置文件加载器 @Bean public static PropertySourcesPlaceholderConfigurer propertyConfigurer() { PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer(); configurer.setLocations(new ClassPathResource("application.properties")); return configurer; } // 注册配置属性Bean @Bean public AppProperties appProperties() { return new AppProperties(); } } - 步骤3:编写主类启动应用
public class MainApp { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); AppProperties props = context.getBean(AppProperties.class); // 读取配置 System.out.println("应用名称:" + props.getName()); System.out.println("数据库地址:" + props.getDb().getUrl()); context.close(); } } - 步骤4:添加配置文件
在src/main/resources下创建application.properties:app.name=MyStandaloneApp app.port=8080 app.db.url=jdbc:mysql://localhost:3306/mydb app.db.username=root
通过以上步骤,就能在普通Java应用中获得和Spring Boot一致的配置绑定体验,包括嵌套对象、类型转换等功能。
内容的提问来源于stack exchange,提问作者vab2048
相关产品推荐
相关产品推荐

