后端程序员开发win小工具(未完待续)

github:https://gitee.com/forgot940629/win-tool-demo
本地启动,查看http://127.0.0.1:8080/form
在这里插入图片描述

场景

在日常工作中可能需要后端开发者开发一些辅助工具。这些辅助工具通常希望能想其他软件一样在桌面系统运行,并且有一些桌面应用的基本功能(可视化页面,配置文件,日志)。与其他应用程序最大的不同是,这种小工具只在很小范围内的开发者之间使用,通常情况下使用者都是开发者的同事。所以对可靠性要求不会特别高(毕竟不是给客户使用),对页面美观或者交互逻辑也没有很高要求,但是需要在较短的时间内实现相应功能。
本篇文章针对上述场景提供了一个demo(代码链接在最上面),便于有类似场景的java后端开发者可以快速构建出一些小工具。需要使用者有一定的spring使用经验,能够写一点前端代码。

问题

问题详述
交互工具如何与使用者交互?命令行交互还是可视化页面?如果是可视化页面选择什么技术展示页面?
错误软件出问题时如何排查错误?如何让用户感知到错误?
配置很多东西不能写死在程序中,不能有一点改动就需要重新编译发布。需要有一种方式可以加载配置文件
发布使用者可能没有开发者相同的运行环境,所以需要一种方式让没有相应运行环境的用户也可以使用此工具

方案

方案概述

问题方案
交互后端使用thymeleaf编写页面,程序运行之后用户可在浏览器上进行相应操作
错误可视化页面中打印错误日志,程序运行时在某个文件中记录运行日志
配置将工作目录下特定名称的作为配置文件
发布使用jpackage将可执行的jar包打包成安装包,用户可通过此安装包安装程序

方案选择的原因

交互

交互的实现方案首先要考虑我会什么。我不想为了开发一个小工具而去学习其他知识,没那么多时间。所以我在方案选择上只考虑了vue和thymeleaf。最终导致我抛弃vue的原因是vue好像要单独启动一个进程去提供前端页面服务(我在github上看了下halo这个项目中对于vue和thymeleaf的使用),而thymeleaf和后端应用都在一个进程,启动spring之后直接就可以在浏览器上看到thymeleaf的页面。所以选择了thymeleaf。

选用thymeleaf更多的原因是我在这方面了解的确实不多,如果有其他好用的且好学(最好也是用html+js/ts编写页面)的工具,辛苦大佬们告知下。

错误

web服务中,错误一般通过两种形式展示出来,一种是通过页面弹窗告知客户,另一种是通过后端日志或者后端报警告知相关运维人员。
作为一个小工具,不需要连接报警平台,但是需要日志文件记录运行状况。同时为了让用户能在页面感知到相应错误,我决定使用文本框展示错误信息,每次新增的错误信息都追加到"运行日志"这个文本框中。
相比于弹窗,文本框有两点好处,一个是可以展示更多的错误细节,甚至可以把报错堆栈打印到文本框上(因为使用者通常也是程序员,所以打印报错堆栈可能更有助于使用);另一个好处是文本框有对历史报错信息的保留,如果是弹窗的话可能报错信息一闪而过,于是就只能F12中一条条翻看请求寻找报错信息。
在这里插入图片描述

配置

我能想到的最直接的设置配置文件的方式就是让程序去某个绝对路径找配置文件,比如"C:\config.properties"。但是如果所有小工具都是这么加载配置文件,那么不同的工具直接可能会共用一个配置文件,会造成一些问题。比如不能同时使用多个工具,因为多个工具之间会抢占端口。

所以我希望配置文件可以与程序在同一个文件夹。

为了实现这一目的,我调用System.getProperty("user.dir") 获取当前工作目录(这个当前工作目录实际上就是程序安装之后exe文件所在目录,后续会介绍如何生成安装包),然后在当前目录下找"config.properties"这个文件并加载。

发布

D:\software\jdk17\java\bin\jpackage.exe --win-dir-chooser --name PhoneNumberGeo --main-jar demo-0.0.1-SNAPSHOT.jar --input .\ --type exe

Tips

安装时尽量不要在C盘下,如果一定要安装到C盘下也尽量不要放到"Program Files"这个文件夹下,jpackage默认安装路径就是这个文件夹,但是我安装到这个文件夹下之后总是会出现奇怪的问题,比如日志不全或者配置文件加载错误。

待解决的问题

程序运行时没有图标,只能通过任务管理器关闭程序

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

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

相关文章

Unity组件开发--短连接HTTP

1.网络请求管理器 using LitJson; using Cysharp.Threading.Tasks; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Networking; using UnityEngine.Events;using System.Web; using System.Text; using Sy…

Spring事务(2):声明式事务管理案例-转账(xml、注解)

1 编写转账案例,引出事务管理问题 需求:账号转账,Tom账号取出1000元,存放到Jack账号上 1.1 建表脚本(MySQL) CREATE TABLE t_account (id INT(11) NOT NULL AUTO_INCREMENT,name VARCHAR(20) NOT NULL,m…

Qt QLabel标签控件

文章目录 1 属性和方法1.1 文本1.2 对齐方式1.3 换行1.4 图像 2. 实例2.1 布局2.2 为标签添加背景色2.3 为标签添加图片2.4 代码实现 QLabeI是Qt中的标签类,通常用于显示提示性的文本,也可以显示图像 1 属性和方法 QLabel有很多属性,完整的可…

学习笔记 | Activiti7

什么是工作流? 业务流程。 举个例子: 假设有一个在线博客平台,我们要让一篇新的文章从作者的头脑里发表出来。整个过程可以分为以下几个步骤: 创建文章草稿 :作者登录博客平台,点击“写新文章”的按钮&#xff0c…

实习学习总结(2023-12-14---2024-1-08)

CS汉化 首先下载CSagent,百度网盘中有 按照如下放置目录 使用出现中文乱码 插件使用乱码主要跟cs客户端加载没有指定UTF-8编码有关 指定编码的字符:-Dfile.encodingUTF-8 上面的字段添加到启动脚本里面即可,如: java -Dfile.e…

与AI合作 -- 写一个modern c++单例工厂

目录 前言 提问 bard给出的答案 AI答案的问题 要求bard改进 人类智能 AI VS 人类 前言 通过本文读者可以学到modern C单例模式工厂模式的混合体,同时也能看到:如今AI发展到了怎样的智能程度?怎样让AI帮助我们快速完成实现头脑中的想法&…

进阶分布式链路追踪

另外我的新书RocketMQ消息中间件实战派上下册,在京东已经上架啦,目前都是5折,非常的实惠。 https://item.jd.com/14337086.html​编辑https://item.jd.com/14337086.html “RocketMQ消息中间件实战派上下册”是我既“Spring Cloud Alibaba微…

读元宇宙改变一切笔记03_元素(下)

1. 元素2:3D,互联网的下一个伟大迈进 1.1. 3D的必要性不仅仅是因为它预示着新事物的出现 1.1.1. 为了使人类文化和劳动实现从物理世界向数字世界的过渡,必须借助3D环境 1.2. 用户通过几乎源源不断的高分辨…

JVM工作原理与实战(十):类加载器-Java类加载器

专栏导航 JVM工作原理与实战 RabbitMQ入门指南 从零开始了解大数据 目录 专栏导航 前言 一、介绍 二、扩展类加载器 三、通过扩展类加载器去加载用户jar包 1.放入/jre/lib/ext下进行扩展 2.使用参数进行扩展 四、应用程序类加载器 总结 前言 ​JVM作为Java程序的运行…

Python——运算符

num 1 num 1 print("num1:", num) num - 1 print("num-1:", num) num * 4 print("num*4:", num) num / 4 print("num/4:", num) num 3 num % 2 print("num%2:", num) num ** 2 print("num**2:", num) 运行结果…

【Linux Shell】10. 函数

文章目录 【 1. 函数的定义 】【 2. 函数参数 】 【 1. 函数的定义 】 所有函数在使用前必须定义 。这意味着必须将函数放在脚本开始部分,直至shell解释器首次发现它时,才可以使用。 调用函数仅使用其函数名即可 。 函数返回值在调用该函数后通过 $? 来…

我的阿里云服务器被攻击了

服务器被DDoS攻击最恶心,尤其是阿里云的服务器受攻击最频繁,因为黑客都知道阿里云服务器防御低,一但被攻击就会进入黑洞清洗,轻的IP停止半小时,重的停两个至24小时,给网站带来很严重的损失。而处理 ddos 攻…

华为ipv4+ipv6双栈加isis多拓扑配置案例

实现效果:sw1中的ipv4和ipv6地址能ping通sw2中的ipv4和ipv6地址 R2-R4为存IPV4连接,其它为ipv6和ipv4双连接 sw1 ipv6 interface Vlanif1 ipv6 enable ip address 10.0.11.1 255.255.255.0 ipv6 address 2001:DB8:11::1/64 interface MEth0/0/1 inter…

Java课程设计团队博客 —— 基于网页的时间管理系统

博客目录 1.项目简介2.项目采用的技术3.功能需求分析4.项目亮点5.主要功能截图6.Git地址7.总结 Java团队博客分工 姓名职务负责模块个人博客孙岚组长 资源文件路径和tomcat服务器的相关配置。 前端的页面设计与逻辑实现的代码编写。 Servlet前后端数据交互的编写。 用户登录和…

java Servlet体育馆运营管理系统myeclipse开发mysql数据库网页mvc模式java编程计算机网页设计

一、源码特点 JSP 体育馆运营管理系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统采用serlvetdaobean,系统具有完整的源代码和数据库,系统主要采用 B/S模式开发。 java Servlet体育馆运营管理系…

嵌入式培训机构四个月实训课程笔记(完整版)-Linux系统编程第六天-Linux信号(物联技术666)

更多配套资料CSDN地址:点赞+关注,功德无量。更多配套资料,欢迎私信。 物联技术666_嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记-CSDN博客物联技术666擅长嵌入式C语言开发,嵌入式硬件,嵌入式培训笔记,等方面的知识,物联技术666关注机器学习,arm开发,物联网,嵌入式硬件,单片机…

910b上跑Chatglm3-6b进行流式输出【pytorch框架】

文章目录 准备阶段避坑阶段添加代码结果展示 准备阶段 配套软件包Ascend-cann-toolkit和Ascend-cann-nnae适配昇腾的Pytorch适配昇腾的Torchvision Adapter下载ChatGLM3代码下载chatglm3-6b模型,或在modelscope里下载 避坑阶段 每个人的服务器都不一样&#xff0…

vue3 封装一个Tooltip 文字提示组件

效果图 默认展示icon图标&#xff0c;悬浮展示文字 如果slot有内容则展示对应内容 实现 用的是El-Tooltip组件 Element - The worlds most popular Vue UI framework 组件代码 <script setup lang"ts"> import { Icon } from /components/Icon import { ElTo…

超维空间M1无人机使用说明书——21、基于opencv的人脸识别

引言&#xff1a;M1型号无人机不仅提供了yolo进行物体识别&#xff0c;也增加了基于opencv的人脸识别功能包&#xff0c;仅需要启动摄像头和识别节点即可 链接: 源码链接 一、一键启动摄像头和人脸识别节点 roslaunch robot_bringup bringup_face_detect.launch无报错&#…

Django配置日志系统的最佳实践

概要 日志是跟踪应用行为、监控错误、性能分析和安全审计的重要工具。在Django框架中&#xff0c;合理配置日志系统可以帮助开发者有效管理项目运行过程中的关键信息。本文将详细介绍Django日志系统的最佳实践。 日志系统概述 Django使用Python的 logging 模块来实现日志系统…