项目有一些配置文件,ini、prop类型的配置文件都考虑过后,还是选择yml文件,如上图:xxconfig.yml。
要求:
1、允许实施人员手动配置
2、配置文件要能轻便的转化为一个JAVA对象
3、程序启动后,打印这些配置项,方便肉眼检查。
一、容器加载配置文件
@Configuration
public class YmlConfigurer {/*** 加载YML格式自定义配置文件*/@Beanpublic 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 {@ResourceDeviceConfig deviceConfig;@ResourceFlowConfig flowConfig;@PostConstructpublic 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、上任开发老铁这么干的…
最后,项目已经不存在了。现实意义上的那种,所以不用担心泄密、公开。
如果有条件,建议不要使用复杂的配置文件。