项目有一些配置文件,ini、prop类型的配置文件都考虑过后,还是选择yml文件,如上图:xxconfig.yml。
要求:
1、允许实施人员手动配置
2、配置文件要能轻便的转化为一个JAVA对象
3、程序启动后,打印这些配置项,方便肉眼检查。
一、容器加载配置文件
@Configuration
public class YmlConfigurer {
/**
* 加载YML格式自定义配置文件
*/
@Bean
public static PropertySourcesPlaceholderConfigurer properties() {
PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
yaml.setResources(
new ClassPathResource("deviceConfig.yml"),
new ClassPathResource("flowConfig.yml")
);
//File引入
configurer.setProperties(yaml.getObject());
return configurer;
}
}
二、配置文件映射为JAVA对象
设备配置
@PropertySource(value = {"classpath:deviceConfig.yml"})
@ConfigurationProperties(prefix = "config")
@Component
@Data
public class DeviceConfig {
String defaultPlc;
List<SerialDataParams> serialDataParams;
List<CameraParam> cameraParams;
List<Rj45Params> rj45Params;
List<DeviceName> virParams;
}
yml配置文件内容
流程配置
@PropertySource(value = {"classpath:flowConfig.yml"})
@ConfigurationProperties(prefix = "flow")
@Component
@Data
public class FlowConfig {
Boolean enable;
Boolean plcEnable;
List<DiscreteInputEnum> senseDis;
List<DiscreteInputEnum> rasterDis;
Boolean outPutEnable;
/**
* api信号
*/
Boolean waitSignalEnable;
List<String> aVideoCameras;
List<String> bVideoCameras;
List<String> photoCameras;
Long initTime;
String initShow;
Integer emptyPoundTrigger;
Integer weighTrigger;
/**
* 超时时间 毫秒
*/
Integer timeOutMin;
/**
* 提示消息
*/
HintMsg hintMsg;
}
yml流程配置文件内容
枚举是依靠名字进行匹配的,如下图
三、打印及使用
@Slf4j
@Component
public class DemoConfig {
@Resource
DeviceConfig deviceConfig;
@Resource
FlowConfig flowConfig;
@PostConstruct
public void init(){
log.info("------------设备配置文件----------------");
log.info("DeviceConfig");
log.info("{}",deviceConfig);
log.info("------------流程配置文件----------------");
log.info("FlowConfig");
log.info("{}",flowConfig);
// todo 检查
Boolean enable = flowConfig.getEnable();
}
}
四、说明
- 配置文件对应的JAVA对象,一般使用String、Integer、Long、Boolean、枚举、封装对象,字段不匹配会丢失,缺少的字段会报错。
- 让实施/测试/开发看启动日志,确定是否配正确。
五、项目背景说明(项目经验,可不看)
- 技术背景:java1.8、sqlite、jpa、springboot
- 指标参数:容灾、并发、高可用等这些指标不考虑,因为一个项目的利润大概0.3~2W(研发人员就我和一头老铁)。
- 现实限制:这么复杂的配置文件,应该放到 “ 数据库-字典表 ” 更好。奈何实施人员不会操作(刚会用电脑的应届生…)。主要是老板为了省钱,4000+请的(知道真相的我…吐个槽)。
- 使用配置文件的更多的理由:
1、安装数据库实施不怎么会操作,只能JAVA操作文件系统自动生成sqlite数据库文件。
2、为了更简单,我都是把java环境、启动脚本、浏览器一起打包。而实施需要做的“ 双击 + 编辑文本文件 ”
3、上任开发老铁这么干的…
最后,项目已经不存在了。现实意义上的那种,所以不用担心泄密、公开。
如果有条件,建议不要使用复杂的配置文件。