spring boot迁移计划 第Ⅰ章 --chapter 1. rust hyper 结合rust nacos-client开发nacos网关 part ③ toml配置文件
1. toml依赖
toml = "0.8"
2. 代码
由于项目还未完成,部分配置(如数据库等)还未增加,后续更新增加
use log::info;
use serde::Deserialize;
use std::{
fs, sync::LazyLock
};
use crate::init::constant::*;
//创建全局静态配置文件
static CONFIG: LazyLock<Config> = LazyLock::new(init_config);
//懒加载初始化,约定优于配置
fn init_config() -> Config {
let contents =
fs::read_to_string(CONFIG_FILE).expect("Something went wrong reading the config file");
let mut config_input: Config =
toml::from_str(&contents).expect(&format!("load {} file failed", CONFIG_FILE));
config_input.server = match config_input.server {
None => Some(Server::default()),
mut ser => {
ser.as_mut().map(|server| {
server.ip = server.ip.clone().or_else(|| Server::default().ip);
server.port = server.port.or_else(|| Server::default().port);
server.name = server.name.clone().or_else(|| Server::default().name);
});
ser
}
};
config_input.nacos = match config_input.nacos {
None => Some(Nacos::default()),
mut nac => {
nac.as_mut().map(|nacos| {
nacos.ip = nacos.ip.clone().or_else(|| Nacos::default().ip);
nacos.port = nacos.port.or_else(|| Nacos::default().port);
nacos.group_name = nacos
.group_name
.clone()
.or_else(|| Nacos::default().group_name);
});
nac
}
};
info!("init config complete");
config_input
}
#[derive(Deserialize, Debug, Clone, PartialEq)]
pub struct Config {
pub server: Option<Server>,
pub nacos: Option<Nacos>,
}
#[derive(Deserialize, Debug, Clone, PartialEq)]
pub struct Server {
pub ip: Option<String>,
pub port: Option<u16>,
pub name: Option<String>,
}
#[derive(Deserialize, Debug, Clone, PartialEq)]
pub struct Nacos {
pub ip: Option<String>,
pub port: Option<u16>,
pub group_name: Option<String>,
}
impl Default for Config {
fn default() -> Self {
Self {
server: Some(Server::default()),
nacos: Some(Nacos::default()),
}
}
}
impl Default for Server {
fn default() -> Self {
Self {
ip: Some(SERVER_DEFAULT_LISTEN.to_owned()),
port: Some(SERVER_DEFAULT_PORT),
name: Some(SERVER_DEFAULT_NAME.to_owned()),
}
}
}
impl Default for Nacos {
fn default() -> Self {
Self {
ip: Some(LOCAL_HOST.to_owned()),
port: Some(NACOS_DEFAULT_PORT),
group_name: Some(NACOS_DEFAULT_GROUP.to_owned()),
}
}
}
impl Config {
//获取全局引用
pub fn global() -> &'static Config{
&CONFIG
}
//下面的函数可以让我们链式调用获取属性值
//如 let server_ip = Config::global().server_ip();
pub fn server_ip(&self) -> String {
match &self.server {
None => Server::default().ip.unwrap(),
Some(server) => match &server.ip {
None => Server::default().ip.unwrap(),
Some(ip) => ip.to_string(),
},
}
}
pub fn server_port(&self) -> u16 {
match &self.server {
None => Server::default().port.unwrap(),
Some(server) => match server.port {
None => Server::default().port.unwrap(),
Some(port) => port,
},
}
}
pub fn server_name(&self) -> String {
match &self.server {
None => Server::default().name.unwrap(),
Some(server) => match &server.name {
None => Server::default().name.unwrap(),
Some(name) => name.to_string(),
},
}
}
pub fn nacos_ip(&self) -> String {
match &self.nacos {
None => Nacos::default().ip.unwrap(),
Some(nacos) => match &nacos.ip {
None => Nacos::default().ip.unwrap(),
Some(ip) => ip.to_string(),
},
}
}
pub fn nacos_port(&self) -> u16 {
match &self.nacos {
None => Nacos::default().port.unwrap(),
Some(nacos) => match nacos.port {
None => Nacos::default().port.unwrap(),
Some(port) => port,
},
}
}
pub fn nacos_group(&self) -> String {
match &self.nacos {
None => Nacos::default().group_name.unwrap(),
Some(nacos) => match &nacos.group_name {
None => Nacos::default().group_name.unwrap(),
Some(group_name) => group_name.to_string(),
},
}
}
}
spring boot迁移计划 第Ⅰ章 --chapter 1. rust hyper 结合rust nacos-client开发nacos网关 part ③ toml配置文件的更多相关文章
- spring boot 笔记--第三章
spring boot 笔记 第三章,使用Spring boot 构建系统: 强烈建议支持依赖管理的构建系统,Maven或Gradle 依赖管理: Spring Boot的每版本都会提供它支持的依赖列 ...
- 携程Apollo(阿波罗)配置中心Spring Boot迁移日志组件,使用配置中心进行管理的思路
说明: 1.Spring Boot项目默认使用logback进行日志管理 2.logback在启动时默认会自动检查是否有logback.xml文件,如果有时会有限加载这个文件. 3.那么如果是用配置中 ...
- 《spring boot》8.2章学习时无法正常启动,报“ORA-00942: 表或视图不存在 ”
在学习<spring boot>一书的过程中,由于原书作者难免有一些遗漏的的地方,或者系统.软件版本不一致.框架更新等各种因素,完全安装书中源码页不能实现项目的正常启动 在8.2章节,演示 ...
- Spring Boot 2.0 迁移指南

目录 目 录第一部分 点睛Spring 4.x第1 章 Spring 基础 .............................................................. ...
- 【原】spring boot在整合项目依赖的问题
最近要开发新的项目,就花了几天时间看了下spring boot的相关资料,然后做了一个demo,不得不说开发效率确实很快,几行注解就完成了事务,aop,数据库等相关配置:但由于先前习惯了spring ...
- 为什么是Spring Boot
原文:https://dzone.com/articles/why-springboot 作者:Siva Prasad Reddy Katamreddy 译者:Oopsguy 本文介绍将各种Sprin ...
- Spring Boot快速入门(最新)
本章通过完成Spring Boot基础项目的构建并实现一个简单的Http请求处理,让大家对Spring Boot有一个初步的了解,并体验其结构简单.开发快速的特性.预计阅读及演练过程将花费约5分钟. ...
- Spring Boot 2.0系列文章(五):Spring Boot 2.0 项目源码结构预览
关注我 转载请务必注明原创地址为:http://www.54tianzhisheng.cn/2018/04/15/springboot2_code/ 项目结构 结构分析: Spring-boot-pr ...
随机推荐
- 清华博士后的DeepSeek使用手册,104页,真的是太厉害了!(免费领取源文件)
<DeepSeek从入门到精通2025>是由清华大学元宇宙文化实验室的余梦珑博士后及其团队撰写.文档的核心内容围绕DeepSeek的技术特点.应用场景.使用方法以及如何通过提示语设计提升A ...
- docker镜像是上传与下载
docker也有自己的镜像仓库,官方仓库网站是https://hub.docker.com/. 如果需要将自己的镜像上传至镜像仓库,首先需要在DockerHub创建账号,地址:https://hu ...
- 清华大学推出第三讲普通人如何抓住 DeepSeek 红利,普通人必备的免费AI手册!
前言 在当今这个日新月异的时代,人工智能(AI)技术正以前所未有的速度改变着我们的生活.工作和社会结构.从智能手机上的语音助手到自动驾驶汽车,从医疗诊断到学术研究,AI的应用无处不在,它如同一股不可阻 ...
- 常用的linux命令以及详解
Linux系统中包含了大量的命令,这些命令是用户与系统交互的主要方式.以下是一些常用的Linux命令及其详细解释: 1. 文件和目录操作 ls:列出目录内容. ls:列出当前目录的文件和子目录. ls ...
- vue--Element-UI Table 表格指定列添加点击事件
最近使用了Element-UI中的Table表格,因为需求需要在指定的列点击跳转,所以必须添加个点击事件,我这里是弹框展示table再点击跳转的,如图所示: 下面是我实现具体的代码(只是代码的一部分, ...
- HDP集群部署
一.环境准备 centos7 安装和系统环境处理 1)运行初始化脚本 !/bin/bash ------------------------------------- 系统环境初始化脚本 本脚本仅支持 ...
- 国产化浪潮下,Gitee DevOps 赋能企业数字化创新
在数字化浪潮汹涌的当下,企业竞争白热化,国产数字化创新成为企业突破发展瓶颈.提升核心竞争力的关键 "钥匙".Gitee DevOps 作为国产研发管理领域的佼佼者,凭借强大功能与优 ...
- sql---索引总结
索引:是为了提高数据查询的效率 常见模型: 哈希表(以键值对key-value存储数据的结构) 适应场景:哈希表这种结构适用于只有等值查询的场景 思路:把值放在数组里,用一个哈希函数把key换算成一个 ...
- [AI/GPT/LLOps/AI中台] Dify : 开源AI大模型应用开发平台(Apache 2.0)
概述:Dify Dify 是一款开源的大语言模型(LLM) 应用开发平台. 它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI ...
- js回忆录(2) -- 逻辑表达式,条件语句
之所以要把逻辑表达式和条件语句放一块写一下,完全是因为二者的联系太过紧密,逻辑运算产生布尔值的结果,而条件语句则根据布尔值决定走那个分支. 逻辑与: &&, 首先逻辑与有逻辑与运算功能 ...