JAVA中YML:几个用法

在这里插入图片描述

项目有一些配置文件,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、上任开发老铁这么干的…

最后,项目已经不存在了。现实意义上的那种,所以不用担心泄密、公开。
如果有条件,建议不要使用复杂的配置文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/442481.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

qt带后缀单位的QLineEdit

QLineEditUnit.h #pragma once #include <QLineEdit> #include <QPushButton>class QLineEditUnit : public QLineEdit {Q_OBJECT public:QLineEditUnit(QWidget* parent Q_NULLPTR);~QLineEditUnit();//获取编辑框单位QString UnitText()const;//设置编辑框单位…

Java开发与配置用到的各类中间件官网

开发配置时用到了一些官网地址&#xff0c;记录一下。 activemq 官网&#xff1a;ActiveMQ elk 官网&#xff1a;Elasticsearch 平台 — 大规模查找实时答案 | Elastic nginx 官网&#xff1a;nginx maven 官网&#xff1a;Maven – Welcome to Apache Maven nexus 官网&a…

C语言之练手题

题目1&#xff1a; 思路&#xff1a;我们定义两个变量left和right分别为数组的左端下标和右端下标。 左端下标的元素为奇数时&#xff0c;left继续往前走&#xff0c;为偶数时就停下 右端下标的元素为偶数时&#xff0c;right- -往回走&#xff0c;为奇数时停下 停下后对应的元…

springboot252基于Springboot和vue的餐饮管理系统的设计与实现

餐饮管理系统的设计与实现 摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱&#xff0c;出错率高&…

RHCE——一、OpenEuler22.03安装部署及例行性任务

RHCE 一、OpenEuler22.03安装部署及例行性任务 一、网络服务1.准备工作2、RHEL9操作系统的安装部署3、配置并优化OpenEuler22.034、网络配置实验&#xff1a;修改网络配置 二、例行性工作1、 单一执行的例行性任务&#xff1a;at&#xff08;一次性&#xff09;at命令详解 2、循…

基于springboot的水果购物商城管理系统(程序+文档+数据库)

** &#x1f345;点赞收藏关注 → 私信领取本源代码、数据库&#x1f345; 本人在Java毕业设计领域有多年的经验&#xff0c;陆续会更新更多优质的Java实战项目&#xff0c;希望你能有所收获&#xff0c;少走一些弯路。&#x1f345;关注我不迷路&#x1f345;** 一、研究背景…

基于redis实现互斥锁

利用setnx命令实现类似获取锁和释放锁。 获取锁&#xff0c;setnx lock 1&#xff0c;返回值为1视为获取成功&#xff0c;为0视为获取失败 释放锁&#xff0c;del lock 特殊情况&#xff1a; 如果获取锁之后&#xff0c;锁来还来不及释放&#xff0c;redis宕机了&#xff0c;这…

我的NPI项目之Android Camera (三)-- 核心部件 Camera的Lens (待修改)

Lens在选择Camera的模组的时候&#xff0c;算是除了Sensor之后的最重要的一个参数了。那么&#xff0c;我们来了解一下消费类电子产品中的camera 模组中的Lens有哪些&#xff0c;又有哪些讲究。 Lens是Camera模组中的一个小模组&#xff1b; 通常Lens有Plastic 和Glass的区别…

Draco点云压缩测试

ref&#xff1a;https://github.com/google/dracohttps://codelabs.developers.google.com/codelabs/draco-3d/index.html#6 Draco Draco 是一个用于编码压缩和解压缩 3D 几何网格和点云的库&#xff0c;从而改进 3D 图形的存储和传输该代码支持压缩点、连接信息、纹理坐标、颜…

如何修复SFC错误“Windows资源保护无法执行请求的操作”?

SFC是Windows中的一个实用程序&#xff0c;它可以扫描和修复Windows系统文件。该命令虽然便捷&#xff0c;但也会因为各种原因而出现错误&#xff0c;比如“Windows资源保护无法执行请求的操作”。如果您也遇到此错误提示&#xff0c;不妨阅读下面的这篇文章了解相应的解决方法…

音视频按照时长分类小工具

应某用户的需求&#xff0c;编写了这款根据音视频时长分类小工具。 实际效果如下&#xff1a; 显示的是时分秒&#xff1a; 核心代码&#xff1a; MediaInfo MI; if (MI.Open(strPathInput.c_str()) 0){return -1;}_tstring stDuration MI.Get(stream_t::Stream_Audio,0,_T…

13:大数据与Hadoop|分布式文件系统|分布式Hadoop集群

大数据与Hadoop&#xff5c;分布式文件系统&#xff5c;分布式Hadoop集群 Hadoop部署Hadoop HDFS分布式文件系统HDFS部署步骤一&#xff1a;环境准备HDFS配置文件 查官方手册配置Hadoop集群 日志与排错 mapreduce 分布式离线计算框架YARN集群资源管理系统步骤一&#xff1a;安装…

遥感生态指数(RSEI)——四个指数的计算

遥感生态指数RSEI&#xff08;Risk-Screening Environmental Indicators&#xff09;分布数据是一种基于卫星遥感影像反演计算得到的数据产品。生态环境质量评价在一定程度上反映一个地区生态环境系统的好坏,也可以在一定程度上反映人类社会活动和环境质量的关系,其对可持续发展…

将python编写的网站制作成docker镜像并上传到Github Packages上

文章目录 前言Docker安装docker注意事项 创建Dockerfile注意事项 构建 Docker 镜像运行 Docker 镜像 发布到Github Packages坑坑到位申请token的坑docker登录的坑给镜像添加标签的坑docker推送的坑 在Github Packages上查看总结 前言 还记得上一篇《借助ChatGPT使用Python搭建…

《Graphis》杂志报道,凯毅文化斩获两项国际金奖

一、凯毅文化获美国Graphis 2024年度奖金奖   近日&#xff0c;收到美国《Graphis》团队邮件约稿&#xff0c;将对深圳凯毅文化获得Graphis年度金奖的作品《城市与自然》进行案例报道。在Graphis 2024年度奖项评选中&#xff0c;凯毅文化作品获得一项金奖&#xff0c;二项银奖…

原生JavaScript,根据后端返回JSON动态【动态列头、动态数据】生成表格数据

前期准备&#xff1a; JQ下载地址&#xff1a; https://jquery.com/ <!DOCTYPE html> <html><head><meta charset"utf-8"><title>JSON动态生成表格数据,动态列头拼接</title><style>table {width: 800px;text-align: cen…

如何用一台电脑主机连两个显示器同步?

本文介绍如何使用一台电脑主机连接两台显示器并同步两台显示器&#xff01; 有两种方法。 方法一&#xff1a;使用两根信号线将两台显示器连接至显卡上的两个视频输出接口。 计算机显卡必须支持双输出&#xff0c;具有两个视频接口&#xff0c;用于连接不同的显示器。 设置方…

学习与学习理论 - 2024教招 - test

一 方向 方向性很重要&#xff0c;像学投篮一样关注发力顺序才是关键出发点&#xff0c;如果这个出发点没确定下来&#xff0c;会走许多弯路。所有学习理论大的观点&#xff0c;到某个人物个人的观点。被干掉之前&#xff08;不能被干掉&#xff09;&#xff0c;掌握所需的知识…

20240309-2-校招前端面试常见问题-NodeJS

校招前端面试常见问题【6】——NodeJS NodeJS Q&#xff1a;NodeJS 的 IO 模型特点是什么&#xff1f;与多线程同步 IO 有什么不同&#xff1f; NodeJS 的 IO 模型&#xff08;更准确的说是 js 的执行环境&#xff0c;也就是 v8&#xff09;的特点是“单线程异步非阻塞”。 …

数据资产运营:快消品牌的新竞争力

在数字化浪潮的推动下&#xff0c;快消品行业正经历一场由数据驱动的变革。从消费者购买行为到市场动态&#xff0c;数据正在成为快消品牌创新和维持竞争优势的关键资源。本文将探讨如何通过高效的数据资产运营提升快消品牌的市场敏锐度和业务成效。 一、数据资产在快消品牌中的…