【云备份|| 日志 day3】服务端配置信息模块

news2025/1/21 5:51:43

云备份day3


在这里插入图片描述

使用文件配置加载一些程序的运行关键信息可以让程序的运行更加灵活,且当需要修改部分内容时,不需要在代码上修改,只需要修改配置文件,然后重启服务器即可。

配置信息

  1. 热点判断时间
  2. 文件下载URL前缀路径
  3. 压缩包后缀名称
  4. 上传文件存放路径
  5. 压缩文件存放路径
  6. 服务端备份信息存放文件
  7. 服务器访问 IP 地址
  8. 服务器访问端口

采用json 格式将配置信息存放在Cloud.conf中,当启动服务器时,由服务器从.conf文件中读取关键数据。

Cloud.conf

{
“hot_time” : 30,
“server_port” : 9090,
“server_ip” : “1.1.1.1”,
“url_prefix” : “/download/”,
“arc_suffix” : “.lz”,
“pack_dir” : “./packdir/”,
“back_dir” : “./backdir/”,
“manager_file” : “./back.dat”
}

读取配置信息
在服务器启动时,需要其自动化去加载数据,采取单例模式,在服务器启动时一起进行初始化。(懒汉模式)

#define CONFIG_FILE "./cloud.conf"
class Config{
private:
time_t _hot_time;
int _server_port;
std::string _server_ip;
std::string _url_prefix;
std::string _arc_suffix;
std::string _pack_dir;
std::string _back_dir;
std::string _manager_file;//备份信息的配置管理
private:
static std::mutex _mutex;
static Config *_instance;
Config();
public:
bool ReadConfig(const std::string &filename);
int GetHotTime();
int GetServerPort();
std::string GetServerIp();
std::string GetURLPrefix();
std::string GetArcSuffix();
std::string GetPackDir();
std::string GetBackDir();
std::string GetManagerFile();
public:
   static Config *GetInstance();
};

代码:

#define CONFIG_FILE "./cloud.conf"
	class Config{
		private:
			Config(){
				ReadConfigFile();
			}
			static Config *_instance;
			static std::mutex _mutex;
		private:
			int _hot_time;
			int _server_port;
			std::string _server_ip;
			std::string _download_prefix;
			std::string _packfile_suffix;
			std::string _pack_dir;
			std::string _back_dir;
			std::string _backup_file;
			bool ReadConfigFile() {
				FileUtil fu(CONFIG_FILE);
				std::string body;
				if(fu.GetContent(&body) == false){
					std::cout << "load config file failed!\n";
					return false;
				}
				Json::Value root;
				if (JsonUtil::UnSerialize(body, &root) == false){
					std::cout << "parse config file failed!\n";
					return false;
				}
				_hot_time = root["hot_time"].asInt();
				_server_port = root["server_port"].asInt();
				_server_ip = root["server_ip"].asString();
				_download_prefix = root["download_prefix"].asString();
				_packfile_suffix = root["packfile_suffix"].asString();
				_pack_dir = root["pack_dir"].asString();
				_back_dir = root["back_dir"].asString();
				_backup_file = root["backup_file"].asString();
				return true;
			}
		public:
			static Config *GetInstance() {
				if (_instance == NULL){
					_mutex.lock();
					if (_instance == NULL) {
						_instance = new Config();
					}
					_mutex.unlock();
				}
				return _instance;
			}
			int GetHotTime() {
				return _hot_time;
			}
			int GetServerPort() {
				return _server_port;
			}
			std::string GetServerIp() {
				return _server_ip;
			}
			std::string GetDownloadPrefix() {
				return _download_prefix;
			}
			std::string GetPackFileSuffix() {
				return _packfile_suffix;
			}
			std::string GetPackDir() {
				return _pack_dir;
			}
			std::string GetBackDir() {
				return _back_dir;
			}
			std::string GetBackupFile() {
				return _backup_file;
			}
	};
	Config *Config::_instance = NULL;
	std::mutex Config::_mutex;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

项目管理-采购管理过程讲解

项目采购管理是指在项目执行过程中&#xff0c;对项目所需的产品、服务或资源进行采购的过程。它涉及确定采购需求、编制采购计划、寻找供应商、进行招标或谈判、签订合同、监督供应商履约等一系列活动。 项目采购管理的目标是确保项目能够按时、按质、按预算获取所需的产品或…

fastapi-路由

FastAPI的APIRouter是一个用于将不同功能模块的端点进行划分的工具&#xff0c;类似于Flask中的蓝图&#xff08;Blueprint&#xff09;。通过APIRouter&#xff0c;你可以将应用程序的不同部分组织成独立的路由模块&#xff0c;从而提高代码的可读性和可维护性。 APIRouter允…

【Midjourney入门教程2】Midjourney的基础操作和设置

文章目录 Midjourney的常用命令和基础设置1、 /imagine2、 /blend3、 /info4、 /subscribe5、 /settings&#xff08;Midjourney的基础设置&#xff09;6、 /shorten 有部分同学说我不想要英文界面的&#xff0c;不要慌&#xff1a; 点击左下角个人信息的设置按钮&#xff0c;找…

(2023最新版)总结 TCP 三挥四握的面试题

任 TCP 虐我千百遍&#xff0c;我仍待 TCP 如初恋。 TCP 基本认识 TCP 头格式有哪些&#xff1f; 我们先来看看 TCP 头的格式&#xff0c;标注颜色的表示与本文关联比较大的字段&#xff0c;其他字段不做详细阐述。 TCP 头格式 序列号&#xff1a;在建立连接时由计算机生成的…

C/C++苹果和虫子 2021年3月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C苹果和虫子 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C苹果和虫子 2021年3月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 你买了一箱n个苹果&#xff0c;很不幸的是买完时箱…

小程序day03

目标 页面导航 声明式导航 1.导航到tabBar页面 2.导航到非tabbar页面 3.后退导航 编程式导航 1.导航到tabBar页面 2.导航到非tabBar页面 3.后退导航 导航传参 1.声明式导航传参 2.编程式导航传参 3.在onLoad中接收导航参数 页面事件 下拉刷新 这个可以获取完数据之后再停止…

06、如何将对象数组里 obj 的 key 值变成动态的(即:每一个对象对应的 key 值都不同)

1、数据情况&#xff1a; 其一、从后端拿到的数据为&#xff1a; let arr [1,3,6,10,11,23,24] 其二、目标数据为&#xff1a; [{vlan_1: 1, value: 1}, {vlan_3: 3, value: 1}, {vlan_6: 6, value: 1}, {vlan_10: 10, value: 1}, {vlan_11: 11, value: 1}, {vlan_23: 23, v…

java--深刻认识面向对象

1.面向对象编程有啥好处 万物皆对象 汽车的数据&#xff0c;找汽车对象处理 手机的数据&#xff0c;找手机对象处理 学生的数据&#xff0c;找学生对象处理 符合人类思维习惯&#xff0c;编程更简单、更直观 2.程序中的对象到底是啥 对象本质上是一种特殊的数据结构(具体…

基于深度学习的目标检测算法 计算机竞赛

文章目录 1 简介2 目标检测概念3 目标分类、定位、检测示例4 传统目标检测5 两类目标检测算法5.1 相关研究5.1.1 选择性搜索5.1.2 OverFeat 5.2 基于区域提名的方法5.2.1 R-CNN5.2.2 SPP-net5.2.3 Fast R-CNN 5.3 端到端的方法YOLOSSD 6 人体检测结果7 最后 1 简介 &#x1f5…

安卓应用开发环境

安卓应用开发环境 安卓应用开发环境安卓Studio下载安装安卓Gradle下载安装 安装&#xff06;构建问题Android Studio无法下载SDKSSH变体simple不支持设置端口cvc-complex-type.2.4.aFailed to find Build Tools revison 30.0.2Android Studio无法找到CMakeCMake was unable to …

lang_process() (一)

一、lang_process() 从现在开始介绍 lang_process()函数&#xff0c;是GNU ld&#xff08;GNU链接器&#xff09;的一个核心函数&#xff0c;负责执行链接过程中的各个关键操作。lang_process(void) 函数涵盖了整个链接过程中的各个关键步骤&#xff0c;包括符号解析、重定位、…

Spring Boot Actuator 漏洞利用

文章目录 前言敏感信息泄露env 泄露配置信息trace 泄露用户请求信息mappings 泄露路由信息heapdump泄露堆栈信息 前言 spring对应两个版本&#xff0c;分别是Spring Boot 2.x和Spring Boot 1.x&#xff0c;因此后面漏洞利用的payload也会有所不同 敏感信息泄露 env 泄露配置信…

【使用Python编写游戏辅助工具】第二篇:键盘监听的应用

前言 这里是【使用Python编写游戏辅助工具】的第二篇&#xff1a;键盘监听的应用。本文主要介绍使用Python实现事件监听功能。 键盘监听是指通过编程的方式监控用户在键盘上的按键操作。 在这里键盘监听的主要用途是&#xff1a; 监听我们按下的按键&#xff0c;如果按下了指…

@Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成

问题 Tag和Operation标签失效 但是Schema标签有效 pom依赖 <!-- 接口文档--><!--引入openapi支持--><dependency><groupId>org.springdoc</groupId><artifactId>springdoc-openapi-starter-webmvc-ui</artifactId><vers…

最长回文子串-LeetCode5 动态规划

由于基础还不是很牢固 一时间只能想到暴力的解法: 取遍每个子串 总数量nn-1n-2…1 O(n^2) 判断每个子串是否属于回文串 O(n) 故总时间复杂度为O(n^3) class Solution { public:string longestPalindrome(string s) { int max0;string ret;for(int i0;i<s.size();i)for(int…

基于SSM+Vue的宠物用品电子商务平台设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

金山文档轻维表之删除所有行记录

目前脚本文档里面的只有删除行记录功能&#xff0c;但是需要指定ID值&#xff0c;不能实现批量删除&#xff0c;很多人反馈但是官方无回应&#xff0c;挺奇怪的 但是批量删除的需求我很需要&#xff0c;最后研究了一下&#xff0c;还是挺容易实现的 测试&#xff1a; 附上脚本…

年终总结一定用得上!这8款AI制作PPT软件不容错过。

PPT&#xff08;PowerPoint&#xff09;已成为日常商务办公、教育和营销环境中广泛使用的一种呈现工具。年终总结时&#xff0c;使用PPT能清晰、直观地展示一年的工作成果&#xff0c;从而让团队成员或上级领导更好地了解并评估工作表现。 在过去&#xff0c;创建精美和引人入…

[PHP]帮管客CRM客户管理系统 v5.1.0

帮管客CRM客户管理系统基于先进的CRM营销理念设计&#xff0c;集客户档案、销售记录、业务往来于一身&#xff0c;以凝聚客户关系、提升资源价值为核心&#xff0c;将潜在客户变为现实客户、从而提升销售量、提高用户的满意度&#xff0c;并增加企业竞争力。帮管客CRM是适用于中…