在properties配置文件中存储集合的规范实现方法
实现方案
以下方案均优于单键逗号分隔写法,可根据你的项目技术栈选择:
方案1:原生Java生态层级键写法(无额外依赖)
用分类作为键的前缀,每个标签单独占一行,无需处理复杂的字符串分割逻辑,版本管理中修改单个标签的Diff也更清晰,不会出现整行修改的冲突问题。
配置文件示例
# 分类标签配置 category.disease.1=nn category.disease.2=nnp category.disease.3=nns category.disease.4=nnps category.symptom.1=vb category.symptom.2=vbd category.symptom.3=vbg
加载代码示例
Properties props = new Properties(); try (InputStream is = ClassLoader.getSystemResourceAsStream("category-tags.properties")) { props.load(is); } Map<String, Set<String>> categoryTagMap = new HashMap<>(); for (String key : props.stringPropertyNames()) { if (key.startsWith("category.")) { String[] keySegments = key.split("\\."); String category = keySegments[1]; String tag = props.getProperty(key); // 自动去重,符合Set特性 categoryTagMap.computeIfAbsent(category, k -> new HashSet<>()).add(tag); } }
方案2:Spring Boot 自动绑定方案(零手写解析逻辑)
如果你的项目是Spring Boot技术栈,直接用@ConfigurationProperties注解即可实现自动注入,Spring内置的类型转换器会自动把逗号分隔的字符串转为Set集合,无需手写任何解析代码。
配置文件示例
category-tag-map.disease=nn,nnp,nns,nnps category-tag-map.symptom=vb,vbd,vbg,vbn
配置类示例
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; import java.util.HashMap; import java.util.Map; import java.util.Set; @Configuration @ConfigurationProperties(prefix = "category-tag-map") public class CategoryTagConfig { // Spring会自动将配置注入到该Map中 private Map<String, Set<String>> config = new HashMap<>(); public Map<String, Set<String>> getConfig() { return config; } public void setConfig(Map<String, Set<String>> config) { this.config = config; } }
使用时直接注入CategoryTagConfig对象,调用getConfig()即可拿到你需要的Map<String, Set<String>>实例。
方案3:YAML 高可读性配置(适合Spring生态项目)
如果你的项目允许使用YAML格式作为配置文件,可读性比properties更高,结构更直观,修改标签时不需要处理逗号分隔符。
配置文件示例
category-tag-map: disease: - nn - nnp - nns - nnps symptom: - vb - vbd - vbg - vbn
该配置同样可以用上述Spring Boot的@ConfigurationProperties直接注入,无需额外解析。
内容的提问来源于stack exchange,提问作者matwasilewski
相关产品推荐
相关产品推荐

