您的位置:首页 >优雅校验配置非空并抛出异常的技巧
发布于2026-04-16 阅读(0)
扫一扫,手机访问

本文介绍在 Java 静态初始化块中,通过封装校验逻辑(而非重复 if 判空)来确保所有必需配置项均被正确加载且不为 null,避免手动逐个检查的冗余代码。
本文介绍在 Java 静态初始化块中,通过封装校验逻辑(而非重复 if 判空)来确保所有必需配置项均被正确加载且不为 null,避免手动逐个检查的冗余代码。
在构建配置驱动型应用(如基于 application.properties 的 Spring Boot 外部化配置替代方案)时,确保关键系统属性在启动时完整、非空至关重要。若缺失某项(例如 aws.bucket.digitalassetsuploads),程序应立即失败并给出明确错误,而非延迟到运行时因 NullPointerException 崩溃。
最简洁、可维护的实践是将“读取 + 非空校验”封装为一个私有静态工具方法,而非为每个字段添加独立的 if (x == null) throw ...。如下所示:
import java.io.IOException;
import java.util.Properties;
public class AppProperties {
public static final String DIGITAL_ASSETS_UPLOADS_BUCKET;
public static final String REGION;
public static final String APP_PEEFIX; // 注意:原代码中拼写为 PEERFIX,此处保留原文拼写
public static final String ACCOUNT_NUMBER;
public static final String TEXTRACT_SSM_SNS_NAME;
public static final String TEXTRACT_SSM_SQS_NAME;
static {
Properties prop = new Properties();
try {
prop.load(AppProperties.class.getClassLoader()
.getResourceAsStream("application.properties"));
} catch (IOException e) {
throw new RuntimeException("Failed to load application.properties from classpath", e);
}
// 统一使用安全读取方法,自动校验非空
DIGITAL_ASSETS_UPLOADS_BUCKET = getNonNullProperty(prop, "aws.bucket.digitalassetsuploads");
REGION = getNonNullProperty(prop, "aws.region");
APP_PEEFIX = getNonNullProperty(prop, "cdk.appprefix");
ACCOUNT_NUMBER = getNonNullProperty(prop, "aws.accountnumber");
TEXTRACT_SSM_SNS_NAME = getNonNullProperty(prop, "aws.ssm.sns.textract");
TEXTRACT_SSM_SQS_NAME = getNonNullProperty(prop, "aws.ssm.sqs.textract");
}
/**
* 安全获取配置值:若指定 key 不存在或值为 null,则抛出 RuntimeException
* @param props 配置源
* @param key 属性键名
* @return 非空字符串值
*/
private static String getNonNullProperty(Properties props, String key) {
String value = props.getProperty(key);
if (value == null || value.trim().isEmpty()) {
throw new RuntimeException("Missing or empty required property: '" + key + "'");
}
return value.trim(); // 自动去除首尾空白,增强健壮性
}
}✅ 优势说明:
⚠️ 注意事项:
该模式虽无 Kotlin 的 by lazy { requireNotNull(...) } 那般语法糖,但以极简、可控、可读的方式达成了同等可靠性目标——让失败发生在最早、最明确的时刻。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
9