Java开源自动刷新读写配置文件以及注释的工具类

java动态刷新@Value *** @description 自定义注解,用来需要修饰需要支持动态刷新的场景**//*** @description 定义一个工具类实现配置转换**/@Component//自定的义配置文件名称});@Override。 阅读详情

背景

在Java项目开发中,经常遇到将项目配置文件对外提供给运维人员配置使用。在Spring中已经很友好的提供了yml、properties的方式读取配置。
但是我们有这种场景,为了降低配置文件的运维难度,一份有详细注释的的配置文件是我们需要。当然我们期望的不仅仅是降低运维难度,我们还期望降低开发的开发难度。因此有了这个开源项目。

项目地址

https://gitee.com/mathcoder23/bean-ini-store

项目功能(bean-ini-store)

  • 基于Java Bean。开发人员面向Bean对象开发。
  • 基于Ini文件。运维人员面向Ini文件配置参数。
  • Bean与Ini文件双向绑定。
  • Ini文件修改,自动刷新到Bean
  • 支持将Bean的备注信息,映射到Ini文件

使用说明

  • 1.需要进行映射的Bean对象需要继承抽象类BaseBeanIni
  • 2.Bean对象的类声明处使用@IniFile注解
  • 3.Bean对象的属性使用@IniField注解
  • 4.Bean对象使用线程安全的单例模式,然后调用BaseBeanIni中的init()方法

@IniFile注解说明


/**
 * ini配置文件注解
 * @author pettyfox.top  
 * @version V1.0   
 * @date 2020-05-09
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface IniFile {
    /**
     * 配置文件路径,支持正反斜杆,会根据系统类型处理分隔符
     * 配置文件会自动生成,将bean的默认值写到文件中
     * @return 配置文件路径
     */
    String storePath() default "config/config.ini";
    String charset() default "UTF-8";

    /**
     * @return 多行配置文件注释
     */
    String[] fileComments() default {};

    /**
     * @return 是否开启配置文件修改实时生效
     */
    boolean autoRefreshFile() default true;
}

@IniField注解


/**
 * ini配置文件字段注解
 * @author pettyfox.top  
 * @version V1.0   
 * @date 2020-05-09
 */
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD,ElementType.TYPE})
public @interface IniField {
    /**
     * @return 分组名称
     */
    String group() default "";

    /**
     * @return 配置文件中注解
     */
    String[] comments() default {};

    /**
     * @return 组字段注解,仅在最后一个@IniFiled中生效
     */
    String[] groupComments() default {};
}

demo案例

import lombok.Data;
import lombok.EqualsAndHashCode;
import org.pettyfox.utils.io.bis.annotation.IniField;
import org.pettyfox.utils.io.bis.annotation.IniFile;
import org.pettyfox.utils.io.bis.bean.BaseBeanIni;

/**
 *     
 *
 * @author pettyfox.top  
 * @version V1.0   
 * @date 2020-05-10
 */

@EqualsAndHashCode(callSuper = true)
@IniFile(fileComments = {
         "--- 项目配置文件 ---"
        ,"--- 配置实时生效,请运维人员了解每个字段含义后配置 ---"
})
@Data
public class DemoBeanIni extends BaseBeanIni {
    private static final String GROUP_BOOT = "boot";
    private static final String GROUP_LOG = "log";
    private DemoBeanIni(){
        init();
    }
    public static final DemoBeanIni INSTANCE = new DemoBeanIni();
    @IniField
    private String backupDir = "/backups";

    @IniField(comments = {"认证id"})
    private String appId;

    @IniField(comments = {"认证key"})
    private String appKey;

    @IniField
    private int backupDays = 180;

    @IniField(comments = {"web端口号"},group = GROUP_BOOT,groupComments={"此组配置,修改后重启生效"})
    private int webPort = 8080;

    @IniField(comments = {"webIP,不填自动获取"},group = GROUP_BOOT)
    private String webIp = "127.0.0.1";

    @IniField(group = GROUP_BOOT)
    private Boolean https = true;

    @IniField(comments = {"是否显示日志"},group = GROUP_LOG,groupComments={"此组配置,修改实时生效"})
    private boolean show = false;

    @IniField(comments = {"日志等级","ERROR、WARN、INFO、DEBUG"},group = GROUP_LOG)
    private String level = "INFO";

    @IniField(comments = {"日志保留天数"},group = GROUP_LOG)
    private int expireDay = 20;

    @Override
    public int getVersion() {
        return 1;
    }
}

测试代码

package org.pettyfox.utils.io.bis

import spock.lang.Specification

import java.util.concurrent.Executors
import java.util.concurrent.TimeUnit

class IniFileWriteReadTest extends Specification {
    def "init test"() {
        given:
        def bean = DemoBeanIni.INSTANCE
        Executors.newSingleThreadScheduledExecutor().scheduleAtFixedRate({
            -> println(bean.toString())
        }, 2, 2, TimeUnit.SECONDS)
        sleep(1000000)
    }
}
ZUpdater:基于 Java 的软件自动更新程序-开源 此实用程序包含在旨在更新的较大程序中。 它允许主程序的用户检查是否有更新的版本可用。 如果是用户有三个选项: - 忽略更新并关闭更新程序框架; - 手动管理更新,该实用程序将在用户浏览器中的软件下载地址处打开一个新窗口; - 自动更新软件,实用程序将下载软件更新程序。 如果更新程序是一个 zip 文件,它的内容将被提取到主程序文件夹,如果它是一个可执行文件,它将被启动。 更多信息可以在维基页面中找到。 文件部分提供了 javadoc 和源代码。 立即下载

相关推荐

Java配置文件自动加载、保存工具类

实现了实体类和配置文件的关系映射、自动加载、自动保存,基于ORM、持久化的思想,使用Java的注解、反射、范型等特性实现。 依赖jtk_util_0.1.jar,地址:http://download.youkuaiyun.com/detail/u010475284/7221887

java如何实现配置文件动态刷新_Spring Cloud 动态刷新配置信息教程详解

有时候在配置中心有些参数是需要修改的,这时候如何不重启而达到实时生效的效果呢?添加依赖...org.springframework.bootspring-boot-starter-actuator...spring-boot-starter-actuator:这个模块的/refresh(POST请求)端点可以刷新配置,更多的使用参考Spring Boot系列文章。生效前提在需要刷新的Bean上添加...

weixin_42244017的博客 949

网页自动刷新工具

网页自动刷新 易语言程序 ,大小仅有10 KB

【Java】读取 springboot 配置文件内容的几种方法

Spring Boot 读取配置文件的原理是通过 Spring Boot 的自动配置机制实现的。Spring Boot 支持多种方式读取配置文件,包括使用 `@Value` 注解、`@ConfigurationProperties` 注解、`@PropertySource` 注解和 `Environment` 对象。其中,`@ConfigurationProperties` 注解是最常用的方式,它可以将配置文件中的配置项映射到一个 Java 类中,使用起来非常方便。

小子宝丁的博客 3589

java 动态修改配置文件

动态修改配置文件, 支持中文且乱码问题已修复。配置文件读写更便捷

Java动态修改配置即时生效的方式WatchService

给大家分享了Java动态修改配置即时生效的方式WatchService的相关知识点内容,有兴趣的朋友可以参考学习下。

Java中的动态配置更新:从配置中心到应用热加载的实现

大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!通过实现配置中心与应用热加载,我们能够在不重启应用的情况下,快速更新配置。通过配置中心与应用热加载,Java后端能够实现动态配置更新,大幅提升系统的灵活性与可维护性。例如,您可以在配置文件中定义不同环境的配置,并通过Spring Profiles来激活相应的配置。为实现动态配置更新,您需要在客户端应用中启用Spring Cloud的刷新功能。通过这种方式,您可以在不同环境中使用不同的配置,进一步提高应用的灵活性。

聚娃科技开发者博客 916

带隙基准电路设计实战:从HSPICE仿真到Virtuoso版图全流程解析

在模拟集成电路设计中,基准电压源是确保系统精度与稳定性的核心模块。其基本原理在于巧妙结合具有正、负温度系数的电压,通过加权求和实现近似零温度系数的稳定输出,这一特性对于高精度数据转换器、电源管理芯片等至关重要。从工程实践角度,利用HSPICE进行深入的直流工作点、温度扫描和工艺角仿真,是验证电路性能、优化温度系数和电源抑制比的关键步骤。而借助Cadence Virtuoso进行版图实现时,必须重点关注电阻与BJT的匹配布局、敏感节点的保护以及电源完整性设计,以确保设计意图在硅片上得以准确呈现。通过完整的从前

weixin_29181861的博客 283

springboot配置项动态刷新

springboot 配置文件一般以yaml方式保存,除了系统配置项如spring、server等外,还有我们自定义的配置项,方便系统启动时自动注入。自定义的配置项一般是动态配置项,在系统运行过程中,可能需要在线修改,来实现自定义的配置项不停服更新,也就是类似于spring-cloud-starter-config的动态刷新。由于系统不重启,无法通过自动注入的方式自动更新自定义配置, 这儿便需要我们手动加载yaml文件,转换为java对象,将变化赋值到spring管理的对象中采用最常见的snakeyaml、

爱码少年 00fly.online 的博客 2万+

VS配置RTKLIB(卫星定位开源代码)环境

@RTKlib代码调试教程-Visual Studio 2019 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 ##RTKLIB-rtklib_2.4.3 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 @RTKlib代码调试教程-Visual Studio 2019 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技

qq_42209977的博客 4486

YOLOv8实战:5分钟搞定Windows环境下的目标检测模型部署(附常见报错解决方案)

本文详细介绍了在Windows环境下快速部署YOLOv8目标检测模型的实战指南,包括环境配置、模型加载、快速验证及常见报错解决方案。通过5分钟快速入门教程,帮助开发者高效实现计算机视觉应用,特别适合需要快速上手的AI开发者。

weixin_30566063的博客 556

C++读写yaml配置文件

文章目录YAML基础语法基本规则三种数据结构map,散列表list,数组scalar,纯量数据结构嵌套map嵌套mapmap嵌套listlist嵌套listlist嵌套map利用yaml-cpp读写yaml配置文件首先下载源码读取 yaml 配置文件NodeNode 是 yaml-cpp 中的核心概念,它用于存储解析后的 yaml 信息。yaml-cpp 中的迭代NodeTypeyaml-cpp 写配置文件 YAML基础语法 YAML所表示的YAML Ain’t Markup Language,YAML 是

小鱼儿飞丫飞 9652

YOLOv5 改进点总览:轻量化、高精度的背后有哪些魔改?

YOLOv5是由Ultralytics团队开发的高效目标检测模型,其核心改进包括:主干网络采用CSPDarknet53提升梯度传播效率;特征融合使用PANet增强小目标识别;输出结构采用解耦头设计优化定位和分类任务。此外,YOLOv5通过CIoU损失函数、Mosaic数据增强和SimOTA标签分配机制进一步提升性能。模型支持多种推理格式(ONNX/TensorRT等),并具备自动锚框匹配和多尺度训练功能,使其在轻量化(yolov5s仅7MB)与高性能(最高51.2% mAP)间取得平衡,但缺乏正式论文支撑是

guoguozgw的博客 1804

Java中常用的工具类总结(16 个超级实用的Java 工具类)

在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类。 以下工具类、方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码。 一. org.apache.commons.io.IOUtils closeQuietly:关闭一个IO流、socket、或者selector且不抛出异常,通常放在finally块 toString:转换...

技术研究中心 8147

YOLO系列算法改进 | C2PSA改进篇 | 融合FSD频域结构解耦模块 | 双域解耦感知,兼顾全局亮度与局部纹理,适应红外小目标与边缘部署场景 | ICME 2026

YOLO系列算法改进 | C2PSA改进篇 | 融合FSD频域结构解耦模块 | 双域解耦感知,兼顾全局亮度与局部纹理,适应红外小目标与边缘部署场景 | ICME 2026 (以YOLO26最新目标检测模型为基础,利用C2PSA_FSD创新模块进行改进)

2502_91881744的博客 314

光伏微电网蓄电池储能控制系统设计及动态性能分析

本文构建了光伏微电网蓄电池储能控制系统的完整理论体系。在系统架构方面,提出了基于直流母线电压平衡的多时间尺度能量管理理论,建立了光伏发电单元的二阶物理模型和MPPT动态跟踪算法。针对蓄电池系统,设计了融合二阶RC等效电路与扩展卡尔曼滤波的SOC估计方法,误差控制在3%以内。双向DC-DC变换器采用状态空间平均建模方法,推导了小信号传递函数,为闭环控制提供理论基础。该体系实现了从瞬时功率平衡到长期能量调度的多层级协同控制,为微电网稳定运行提供了系统的解决方案。

AI的内部世界的博客 191

常用的Java工具类——十六种

  在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类。以下工具类、方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码。 一. org.apache.commons.io.IOUtils closeQuietly:关闭一个IO流、socket、或者selector且不抛出异常,通常放在finally块 toSt...

Xenoverse的博客 6059

一文搞定离线环境下的RAG引擎部署

在人工智能浪潮下,技术已成为构建智能问答、文档分析和代码助手等应用的核心。然而,在许多企业场景中,出于数据安全和性能的考虑,服务器往往部署在中,并要求极致的推理效率。这给依赖外部资源的应用部署带来了巨大挑战。如何在这种严苛的环境下,完整、可靠地部署一套包含向量数据库、**高性能推理服务(vLLM)**和Python后台的复杂RAG系统呢?本文将为你提供一个,手把手教你如何使用 Docker 技术,将一套基于 Weaviate 和的 Python RAG 应用完整打包,并在离线环境中一键部署。

木鱼时刻的专栏 1241

精选16个最常用的Java 工具类,每一个都十分有用

​   现在人工智能非常火爆,很多朋友都想学,但是一般的教程都是为博硕生准备的,太难看懂了。最近发现了一个非常适合小白入门的教程,不仅通俗易懂而且还很风趣幽默。所以忍不住分享一下给大家。点这里可以跳转到教程。 ...

linjingyg的博客 3582

关于 Nginx 监听地址 0.0.0.0 的详细解释

0.0.0.0在Nginx配置中表示监听服务器所有网络接口(包括公网IP、内网IP和本地回环地址),这是默认配置。当使用listen 80;时,Nginx会接受通过服务器任何IP地址的80端口访问请求。相比只监听特定IP,这种配置更通用,但也意味着服务会对外网开放,需注意安全风险。可通过netstat命令验证监听状态,显示0.0.0.0:80即表示正确配置。

weixin_43674738的博客 1563

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

java内置工具类

在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类。以下工具类、方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码。 一. org.apache.commons.io.IOUtils closeQuietly:关闭一个IO流、socket、或者selector且不抛出异常,通常放在finally块 toString:...

一个假的程序员 1012

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

java代码除,Java除开源代码注释

Java去除源代码注释总体思路是对待分析的带注释段的字符串进行遍历,声明一个缓冲字符串变量来记录非注释的部分,最后返回这个缓冲字符串变量作为结果1.首先考虑/*comment*/形式的注释当遇到/*部分便停止记录,继续往后遍历到*/部分,实现跳过/**/段2.考虑/*comment/*inside*/out*/形式的嵌套注释声明一个数字变量来记录/*的开始的次数,遇到一个/*就+1,遇到一个*/就...

weixin_42644410的博客 314

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

java工具类怎么写_常用的Java工具类——十六种

常用的Java工具类——十六种在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类。以下工具类、方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码。一. org.apache.commons.io.IOUtilscloseQuietly:关闭一个IO流、socket、或者selector且不抛出异常,通常放在finally块...

weixin_33398049的博客 2707

16 个有用的的 Java 工具类

16 个有用的的 Java 工具类 在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类。以下工具类、方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码。 一. org.apache.commons.io.IOUtils closeQuietly:关闭一个IO流、socket、或者selector且不抛出异常,通常放在fin...

晴天 245

JavaTutorial工具包实战:常用Java工具类的封装与应用

JavaTutorial是一个汇集了十年Java技术积累的开源项目,提供了丰富的工具类封装与应用示例。本文将带你探索如何利用这些工具类简化日常开发,提升代码质量和开发效率。无论是字符串处理、日期操作还是集合管理,JavaTutorial工具包都能为你提供简洁高效的解决方案。 ## 为什么需要工具类封装? 在Java开发中,我们经常会遇到各种重复的功能实现,比如字符串判空、日期格式化、集合操作等

gitblog_00654的博客 953

什么是java工具类_常用高效 Java 工具类总结

一、前言在Java中,工具类定义了一组公共方法,这篇文章将介绍Java中使用最频繁及最通用的Java工具类。以下工具类、方法按使用流行度排名,参考数据来源于Github上随机选取的5万个开源项目源码。二、org.apache.commons.io.IOUtilsjavacloseQuietly:关闭一个IO流、socket、或者selector且不抛出异常,通常放在finally块toString...

weixin_39992788的博客 272
上一篇: 后端开发中,文件存储的命名特点分析
下一篇: JDK1.8 ConcurrentHashMap computeIfAbsent 嵌套的死锁bug
mt23
博客等级 码龄12年 33粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值