基于 Java 列举和说明常用的外部化配置的实现方式?

基于 Java 列举和说明常用的外部化配置的实现方式?

文章目录

一、基本说明

在Java应用程序中,外部化配置是分离配置信息(如数据库连接、服务端点、功能标志等)与代码 的一个重要实践。这样可以在不同环境(开发、测试、生产)间部署应用时,不必修改代码就能够调整其行为。

二、常用的外部化配置的实现方式

1、属性文件(Properties files)

使用.properties文件来存储配置,然后通过java.util.Properties类加载这些配置。

java 复制代码
Properties props = new Properties();
FileInputStream in = new FileInputStream("config.properties");
props.load(in);
in.close();

String dbUrl = props.getProperty("database.url");

2、环境变量(Environment Variables)

使用系统环境变量 来配置应用。可以通过System.getenv()在Java中访问它们。

java 复制代码
String dbUrl = System.getenv("DATABASE_URL");

3、系统属性(System Properties)

在启动 Java 虚拟机 时传递-D参数定义系统属性,并且可以通过System.getProperty()进行访问。

java 复制代码
String dbUrl = System.getProperty("database.url");

例如,在启动JVM时可以这样设置:java -Ddatabase.url=jdbc:mysql://localhost:3306/mydb -jar myapp.jar

4、命令行参数

直接通过命令行传参,然后在Java程序中解析这些参数。

java 复制代码
// 在main函数中获取命令行参数
public static void main(String[] args) {
    if (args.length > 0) {
        String dbUrl = args[0];
        // 其他的逻辑
    }
}

5、XML, JSON, YAML或TOML文件

使用标准数据交换格式 的文件来存储配置信息,并使用相应的解析库载入配置。

例如,使用 Jackson 库加载 JSON 配置:

java 复制代码
ObjectMapper mapper = new ObjectMapper();
MyAppConfig config = mapper.readValue(new File("config.json"), MyAppConfig.class);

6、Spring框架的配置

Spring框架为外部化配置 提供了强大的支持,可以使用@Value注解、Environment抽象或 @ConfigurationProperties 来加载不同来源的配置。

java 复制代码
@Value("${database.url}")
private String dbUrl;

或者使用application.propertiesapplication.yml文件。

7、配置服务器 (如Spring Cloud Config)

使用集中化的配置服务器 来管理所有环境的配置,应用程序在启动时从配置服务器获取其配置

8、数据库

有时配置存储在数据库 中,启动时由应用程序读取。这对于动态配置管理非常有用。

相关推荐
qq_283720052 分钟前
Python GIL 底层实现与高并发突破实战
python·性能优化·高并发·全局锁
橙露13 分钟前
Python 对接 API:自动化拉取、清洗、入库一站式教程
开发语言·python·自动化
Omigeq19 分钟前
1.4 - 曲线生成轨迹优化算法(以BSpline和ReedsShepp为例) - Python运动规划库教程(Python Motion Planning)
开发语言·人工智能·python·算法·机器人
2301_8084143820 分钟前
自动化测试的实施
开发语言·python
无限码力24 分钟前
华为OD技术面真题 - Python开发 - 4
python·华为od·华为od技术面真题·华为od面试八股文·华为od面试真题·华为odpython开发真题·华为od技术面题目
波波00738 分钟前
写出稳定C#系统的关键:不可变性思想解析
开发语言·c#·wpf
成为大佬先秃头39 分钟前
前后分离项目:整合JWT+Shiro
java·springboot·shiro·jwt
y = xⁿ42 分钟前
【Leet Code 】滑动窗口
java·算法·leetcode
day day day ...1 小时前
MyBatis条件误写引发的查询条件污染分析与防范
java·服务器·tomcat
dr_yingli1 小时前
fMRI(3-1)报告(个体化报告)生成器说明
开发语言·matlab