SpringBoot整合Freemaker结合Vue实现页面填写一键自动生成Redis的配置文件

🧑‍💻作者名称:DaenCode
🎤作者简介:啥技术都喜欢捣鼓捣鼓,喜欢分享技术、经验、生活。
😎人生感悟:尝尽人生百味,方知世间冷暖。
📖所属专栏:SpringBoot实战


系列文章目录

标题
一文带你学会使用SpringBoot+Avue实现短信通知功能(含重要文件代码)
一张思维导图带你学会Springboot创建全局异常、自定义异常
一张思维导图带你打通SpringBoot自定义拦截器的思路
28个SpringBoot项目中常用注解,日常开发、求职面试不再懵圈
一张思维导图带你学会SpringBoot、Vue前后端分离项目线上部署
一张流程图带你学会SpringBoot结合JWT实现登录功能
一张思维导图带你学会使用SpringBoot中的Schedule定时发送邮件
一张思维导图带你学会使用SpringBoot异步任务实现下单校验库存
一张思维导图带你学会SpringBoot使用AOP实现日志管理功能
一张图带你学会入门级别的SpringBoot实现文件上传、下载功能
一张思维导图带你学会SpringBoot自定义Filter
一张思维导图带你学会SpringBoot整合Redis

在这里插入图片描述


文章目录

  • 系列文章目录
  • 🌟前言
  • 🌟SpringBoot整合Freemaker
    • pom依赖引入
    • 修改配置文件
    • 配置参数实体类
    • Controller类
    • 自动生成文件工具类
    • Redis配置模板文件
  • 🌟Vue代码
    • 页面效果图
  • 🌟效果测试
  • 🌟写在最后

🌟前言

在一次搭建Redis哨兵模式时,在最后验证是否搭建成功时节点信息是错误的,经过排查,最后因为是配置文件出错导致的。

于是,我就想有没有一种办法可以通过可视化的方式去配置Redis配置文件,这样可以避免直接修改配置文件时,因视觉问题而造成配置文件出错,也可能是我视力差。

最后,我想到了使用SpringBoot整合Freemaker并结合Vue实现自动生成配置文件来减少错误率的发生。


🌟SpringBoot整合Freemaker

pom依赖引入

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

修改配置文件

server.port=8081
#整合freeemaker
#模板所在路径
spring.freemarker.template-loader-path= classpath:/templates
#模板后缀名
spring.freemarker.suffix= .ftl
spring.freemarker.settings.classic_compatible=true

配置参数实体类

创建配置参数实体类,这里省略了getter、setter方法。

/*** 配置参数实体类*/
public class ConfigParams {/*** 指定服务器监听的ip地址*/private String bind;/*** 端口号*/private String port;/*** 是否开启守护进程*/private boolean isDamonize;/*** 访问redis密码*/private String requirepass;/*** 日志文件的路径*/private String logPath;/*** 持久化文件名称*/private String dbFileName;/*** 持久化文件存储路径*/private String dirPath;/*** rdb持久化策略配置*/private String rdbPolicy;/*** 是否开启aof*/private boolean isAof;/*** 主节点访问密码*/private String masterauth;/*** 指定从哪个主节点复制*/private String replicaof;

Controller类

@RestController
@RequestMapping("/api/v1/redis")
public class RedisConfigController {@PostMapping("generate")public JsonData generateConfig(@RequestBody ConfigParams configParams) throws IOException, TemplateException {//自动生成配置文件的工具类GenetateConfigUtil.generateConfigFile(configParams,"E:\\IdeaWorkspace\\config-tools\\redis.conf");return JsonData.buildSuccess();}
}

自动生成文件工具类

通过整合Freemaker配置,自动生成Redis配置文件。
逻辑流程

  1. 创建Freemaker配置。
  2. 从路径中读取Redis模板文件。
  3. 加载模板文件。
  4. 构造模板数据,将前端传入的数据存放到模板中。
  5. 生成最终的配置文件内容。
public class GenetateConfigUtil {public static void generateConfigFile(ConfigParams configParams,String generateFilePath) throws IOException, TemplateException {//创建freemarker配置Configuration configuration=new Configuration(Configuration.VERSION_2_3_31);configuration.setDirectoryForTemplateLoading(new File("E:\\IdeaWorkspace\\config-tools\\src\\main\\" +"resources\\templates\\"));// 加载模板文件Template template = configuration.getTemplate("redis-config-template.ftl");boolean daemonizeFlag=false;if (configParams.isDamonize()==true){daemonizeFlag=true;}// 构造模板数据Map<String, Object> data = new HashMap<>();data.put("bindIp", configParams.getBind());data.put("port", configParams.getPort());data.put("daemonize",daemonizeFlag);data.put("requirepass",configParams.getRequirepass());data.put("logfilepath",configParams.getLogPath());data.put("dbfilename",configParams.getDbFileName());data.put("rdbpolicy",configParams.getRdbPolicy());data.put("dirPath",configParams.getDirPath());data.put("masterauth",configParams.getMasterauth());data.put("replicaof",configParams.getReplicaof());// 生成最终的配置文件内容FileWriter writer = new FileWriter(generateFilePath);template.process(data, writer);writer.flush();writer.close();}
}

Redis配置模板文件

在templates下创建模板文件redis-config-template.ftl。
在这里插入图片描述
模板代码

#任何IP都可以访问
<#if bindIp?has_content>
bind ${bindIp}
</#if>
#端口号
<#if port?has_content>
port ${port}
</#if>
#守护进程
<#if daemonize?has_content>
daemonize ${daemonize?string('yes','no')}
</#if>
#密码
<#if requirepass?has_content>
requirepass "${requirepass}"
</#if>
#日志文件
<#if logfilepath?has_content>
logfile "${logfilepath}"
</#if>
# 持久化文件名称
<#if dbfilename?has_content>
dbfilename "${dbfilename}"
</#if>
#持久化文件存储路径
<#if dirPath?has_content>
dir "${dirPath}"
</#if>
#持久化策略
<#if rdbpolicy?has_content>
save ${rdbpolicy}
</#if>
#访问主节点的密码
<#if masterauth?has_content>
masterauth "${masterauth}"
</#if>
#指定从哪个节点复制
<#if replicaof?has_content>
replicaof "${replicaof}"
</#if>

🌟Vue代码

关于创建步骤就不具体介绍了,下边直接给出页面代码。

<template><div class="redisConfig"><h2 align="center">Redis配置文件生成</h2><div class="redisForm"><el-row :gutter="15"><el-form ref="elForm" :model="formData" :rules="rules" size="mini" label-width="105px" label-position="right"><el-col :span="24"><el-form-item label="服务器监听IP" prop="bind"><el-input v-model="formData.bind" placeholder="请输入服务器监听IP" clearable :style="{width: '100%'}"></el-input></el-form-item></el-col><el-col :span="24"><el-form-item label="端口号" prop="port"><el-input v-model="formData.port" placeholder="请输入端口号" clearable :style="{width: '100%'}"></el-input></el-form-item></el-col><el-col :span="1"><el-form-item label="是否开启守护进程" prop="isDamonize"><el-switch v-model="formData.isDamonize"></el-switch></el-form-item></el-col><el-col :span="24"><el-form-item label="Redis密码" prop="requirepass"><el-input v-model="formData.requirepass" placeholder="请输入Redis密码" clearable show-password:style="{width: '100%'}"></el-input></el-form-item></el-col><el-col :span="24"><el-form-item label="日志文件路径" prop="logPath"><el-input v-model="formData.logPath" placeholder="/path/xxx.log" clearable:style="{width: '100%'}"></el-input></el-form-item></el-col><el-col :span="24"><el-form-item label="持久化文件名" prop="dbFileName"><el-input v-model="formData.dbFileName" placeholder="请输入持久化文件名" clearable:style="{width: '100%'}"></el-input></el-form-item></el-col><el-col :span="24"><el-form-item label="持久化文件路径" prop="dirPath"><el-input v-model="formData.dirPath" placeholder="/path/data" clearable :style="{width: '100%'}"></el-input></el-form-item></el-col><el-col :span="24"><el-form-item label="RDB持久化策略配置" prop="rdbPolicy"><el-input v-model="formData.rdbPolicy" placeholder="save <minute> <changes>" clearable:style="{width: '100%'}"></el-input></el-form-item></el-col><el-col :span="1"><el-form-item label="是否开启AOF持久化" prop="isAof"><el-switch v-model="formData.isAof"></el-switch></el-form-item></el-col><el-col :span="24"><el-form-item label="主节点访问密码" prop="masterauth"><el-input v-model="formData.masterauth" placeholder="请输入主节点访问密码" clearable show-password:style="{width: '100%'}"></el-input></el-form-item></el-col><el-col :span="24"><el-form-item label="指定复制主节点" prop="replicaof"><el-input v-model="formData.replicaof" placeholder="请输入指定复制主节点IP" clearable:style="{width: '100%'}"></el-input></el-form-item></el-col><el-col :span="24"><el-form-item size="large"><el-button type="primary" @click="submitForm">提交</el-button><el-button @click="resetForm">重置</el-button></el-form-item></el-col></el-form></el-row></div></div>
</template>
<script>
export default {components: {},props: [],data() {return {formData: {bind: "",port: undefined,isDamonize: false,requirepass: undefined,logPath: undefined,dbFileName: undefined,dirPath: "",rdbPolicy: undefined,isAof: undefined,masterauth: undefined,replicaof: undefined,},rules: {bind: [{required: true,message: '请输入服务器监听IP',trigger: 'blur'}],port: [{required: true,message: '请输入端口号',trigger: 'blur'}],requirepass: [],logPath: [],dbFileName: [],dirPath: [],rdbPolicy: [],masterauth: [],replicaofIp: [],replicaofPort: [],},}},computed: {},watch: {},created() {},mounted() {},methods: {submitForm() {this.$refs['elForm'].validate(valid => {if (valid) {this.request.post("/api/v1/redis/generate", this.formData).then(res => {if(res.code === '0') {this.$message.success("生成成功")} else {this.$message.error(res.msg)}})}})},resetForm() {this.$refs['elForm'].resetFields()},}
}</script>
<style>
.redisConfig {position: fixed;width: 100%;height: 100vh; /* 可以根据需要设置高度 */
}.redisForm {position: absolute;top: 45%;left: 50%;transform: translate(-50%, -50%); /* 平移至中心位置 *//* 根据需要设置内容样式 */
}</style>

页面效果图

在这里插入图片描述

🌟效果测试

在页面填写完相关信息提交后,将会在指定路径下生成配置文件。
在这里插入图片描述

🌟写在最后

有关于SpringBoot整合Freemaker结合Vue实现页面填写一键自动生成Redis的配置文件到此就结束了。

感谢大家的阅读,希望大家在评论区对此部分内容散发讨论,便于学到更多的知识。


请添加图片描述

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

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

相关文章

管理类联考——逻辑——形式逻辑——汇总篇——知识点突破——假言——各种假言

角度 多重假言 &#xff08;1&#xff09;如果A&#xff0c;那么B&#xff0c;除非C。 符号化为&#xff1a;┐C→ (A→B)。 等价于&#xff1a;┐C→ (┐A∨B)。 等价于&#xff1a;C∨(┐A∨B)。 等价于&#xff1a;C∨┐A∨B。 等价于&#xff1a;┐(C∨┐A&#xff09;→…

035 - datetime和timedstamp

该DATETIME类型用于包含日期和时间部分的值。MySQL检索并DATETIME以格式显示 值 。支持的范围是 到。 YYYY-MM-DD hh:mm:ss1000-01-01 00:00:009999-12-31 23:59:59 该TIMESTAMP数据类型被用于同时包含日期和时间部分的值。 UTCTIMESTAMP的范围是UTC。 1970-01-01 00:00:01203…

素数之谜揭秘:一文详解试除法判断素数

这是我非常喜欢的一道编程题目。不要小看这道题&#xff0c;它看似简单&#xff0c;实则奥妙无穷。由于这是C语言的入门篇&#xff0c;只介绍最简单&#xff0c;也最容易想到的方法&#xff1a;试除法。但哪怕是试除法&#xff0c;也有不少变化。 要想了解试除法&#xff0c;首…

软件测试人需要掌握的测试知识架构体系(上)

软件计划与可行性研究&#xff08;问题定义、可行性研究&#xff09;&#xff1b;需求分析&#xff1b;软件设计&#xff08;概要设计、详细设计&#xff09;&#xff1b;编码&#xff1b;软件测试&#xff1b;运行与维护。 一、软件的生命周期(SDLC) 1、生存周期划分 各阶段…

软件测试/测试开发丨Selenium 高级定位 Xpath

点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接&#xff1a;https://ceshiren.com/t/topic/27036 一、xpath 基本概念 XPATH是一门在XML文档中查找信息的语言 XPATH使用路径表达式在XML文档中进行导航 XPATH的应用非常广泛&#xff0c;可以用于UI自…

RT-Thread 线程管理(一)

线程管理 在日常生活中&#xff0c;要完成一个大任务&#xff0c;一般会将它分解成多个简单、容易解决的小问题&#xff0c;小问题逐个被解决&#xff0c;大问题也就随之解决了。 在多线程操作系统中&#xff0c;也同样需要开发人员把一个复杂的应用分解成多个小的、可调度的…

Ubantu安装mongodb,开启远程访问和认证

最近因为项目原因需要在阿里云服务器上部署MongoDB&#xff0c;操作系统为Ubuntu&#xff0c;网上查阅了一些资料&#xff0c;特此记录一下步骤。 1.运行apt-get install mongodb命令安装MongoDB服务&#xff08;如果提示找不到该package&#xff0c;说明apt-get的资源库版本比…

android 实现本地一键打包,告别繁琐的studio操作

前言 在实际开发项目中&#xff0c;我们的工程目录往往是多个app在一个工程下的&#xff0c;每次打包都需要手动的用studio点击Build->Generate Signed Bundle or APK->APK 选择app&#xff0c;签名等&#xff0c;甚至有的app签名还不一样&#xff0c;还需要手动的来回切…

iTOP-RK3588开发板Android12 设置系统默认不休眠

修改文件&#xff1a; device/rockchip/rk3588/overlay/frameworks/base/packages/SettingsProvider/res/values/defaults. xml 文件&#xff0c;如下图所示&#xff1a; - <integer name"def_screen_off_timeout">60000</integer> <integer name&q…

设计模式(一)

1、适配器模式 &#xff08;1&#xff09;概述 适配器中有一个适配器包装类Adapter&#xff0c;其包装的对象为适配者Adaptee&#xff0c;适配器作用就是将客户端请求转化为调用适配者中的接口&#xff1b;当调用适配器中的方法时&#xff0c;适配器内部会调用适配者类的方法…

【【萌新的STM32学习25--- USART寄存器的介绍】】

萌新的STM32学习25- USART寄存器的介绍 STM32–USART寄存器介绍&#xff08;F1&#xff09; 控制寄存器1 &#xff08;CR1&#xff09; 位13&#xff1a; 使能USART UE 0&#xff1a; USART分频器和输出被禁止 1&#xff1a; USART模块使能 位12 &#xff1a; 配置8个数据位…

分类算法系列③:模型选择与调优 (Facebook签到位置预测)

目录 模型选择与调优 1、介绍 模型选择&#xff08;Model Selection&#xff09;&#xff1a; 调优&#xff08;Hyperparameter Tuning&#xff09;&#xff1a; 本章重点 2、交叉验证 介绍 为什么需要交叉验证 数据处理 3、⭐超参数搜索-网格搜索(Grid Search) 介绍…

Maven报错 [ERROR] Malformed \uxxxx encoding.

IDEA刷新项目&#xff0c;报错[ERROR] Malformed \uxxxx encoding. 现象 1.控制台报错 [ERROR] Malformed \uxxxx encoding.2.项目代码大部分爆红 3.Pom文件不爆红 4.IDEA未能构建Dependencies 尝试清除IDEA缓存无效&#xff0c;重新克隆项目无效&#xff0c;更换低版本mav…

Vue2里监听localstorage里值的变化

有的时候,我们需要根据本地缓存在localstorage里值的变化做出相应的操作,这就需要我们监听localstorage: 首先,我们在src下的libs文件夹下新建一个stroage.js用于重写setItem事件,当使用setItem的时候,触发,window.dispatchEvent派发事件 const Stroage = {// 重写set…

考生作弊行为分析算法

考生作弊行为分析系统利用pythonyolo系列网络模型算法框架&#xff0c;考生作弊行为分析算法利用图像处理和智能算法对考生的行为进行分析和识别&#xff0c;经过算法服务器的复杂计算和逻辑判断&#xff0c;算法将根据考生行为的特征和规律&#xff0c;判定是否存在作弊行为。…

Git基础教程-常用命令整理:学会Git使用方法和错误解决

目录 一、了解Git的基本概念 二、Git的安装和配置 Git的安装 Git的配置 用户信息 文本编辑器 差异分析工具 查看配置信息 三、Git的基本操作 基本原理 基本操作命令 基本操作示例 场景一&#xff1a;创建新仓库 场景二&#xff1a;拉取并编辑远程仓库 四、常见问…

开源PHP 代挂机源码,可对接QQ、网易云、哔哩哔哩、QQ空间、等级加速等等

本程序运行环境PHP5.6 95dg/config.php修改系统数据库 进入数据库绑定 你搭建的域名即可 部署完成 进入数据库 找到data 输入绑定授权域名即可进行授权打开此网站 网站是无对接接口 需要您自行找对接接口即可 本源码有点乱 有实力的铁铁 可以修改一下哦&#xff01;

Spring MVC介绍

MVC模式是什么 MVC 模式&#xff0c;全称为 Model-View-Controller&#xff08;模型-视图-控制器&#xff09;模式&#xff0c;它是一种软件架构模式&#xff0c;其目标是将软件的用户界面&#xff08;即前台页面&#xff09;和业务逻辑分离&#xff0c;使代码具有更高的可扩展…

造测试数据

对应sql&#xff1a; from openpyxl import Workbook from faker import Faker# 创建一个Workbook对象 workbook Workbook() # 获取默认的活动工作表 sheet workbook.active# 创建一个Faker对象 fake Faker()# 写入表头 header [Name, Address, Email] sheet.append(heade…

ChatGPT 与 Python进行动态可视化分析

Python数据分析目前最为热门的岗位操作。 想使用Python进行可视化分析,但是又不想写代码,测试,验证。可以交给ChatGPT,open AI 来进行操作。 这样的动态图显示,我们只需要给ChatGPT发送一个指令,人工智能就能很快的实现这一操作。 请使用Python与Echarts做一个动态可视…