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

news2024/11/17 11:55:49

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.coloradmin.cn/o/1368387.html

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

相关文章

股票开户须知!北京股票开户佣金最低是多少?找那家证券公司开户手续费低?

股票交易是一种投资活动,需要一些基本的须知来帮助投资者进行决策和进行交易。以下是一些股票交易的基本须知: 了解股票市场:了解股票市场的基本原理、运作机制和相关法规是非常重要的。投资者应学习股票交易的基本概念和术语,了解…

BERT 模型是什么

科学突破很少发生在真空中。相反,它们往往是建立在积累的人类知识之上的阶梯的倒数第二步。要了解 ChatGPT 和 Google Bart 等大型语言模型 (LLM) 的成功,我们需要回到过去并谈论 BERT。 BERT 由 Google 研究人员于 2018 年开发&…

【算法练习】leetcode算法题合集之二叉树篇

递归遍历基础篇 前序遍历,中序遍历,后序遍历是根据处理根节点的位置来命名的。 树的处理大多用到了递归,递归需要知道终止条件。 前序遍历(中左右) 144.二叉树的前序遍历 中左右,先处理根节点,…

简单易懂的PyTorch激活函数大全详解

目录 torch.nn子模块Non-linear Activations nn.ELU 主要特点与注意事项 使用方法与技巧 示例代码 图示 nn.Hardshrink Hardshrink函数定义 参数 形状 示例代码 图示 nn.Hardsigmoid Hardsigmoid函数定义 参数 形状 示例代码 图示 nn.Hardtanh HardTanh函数…

湖南大学-数据库系统-2018期末考试解析

【写在前面】 这是2018年的卷子,复习备考的时候做了并与同学校对了答案。答案仅供参考。这张难度不大,同样的,跟前几张差不了太多。但是从这一年开始,选择题变成了15道,越来越贴切近几年的考试了。 一、单选题&#xf…

基于SpringBoot摄影跟拍预定管理系统(系统+数据库+文档)

🍅点赞收藏关注 → 私信领取本源代码、数据库🍅 本人在Java毕业设计领域有多年的经验,陆续会更新更多优质的Java实战项目 希望你能有所收获,少走一些弯路。🍅关注我不迷路🍅摘 要 首先,一开始便是清楚的论…

揭秘证券公司网站部署的SSL证书品牌

近日,有多家证券公司因网络安全问题被点名,由此,建立完善的网络安全管理制度、采用适当的安全策略和工具,以营造安全的网络环境,更好的保护用户隐私和业务安全就显得尤为重要。SSL证书作为保护传输数据安全的重要工具&…

pve多台物理机虚拟化 pve虚拟机优势

Proxmox VE是一个运行虚拟机和容器的平台。基于Debian Linux,完全开源。为了获得最大的灵活性,实现了两种虚拟化技术——基于内核的虚拟机(KVM)和基于容器的虚拟化(LXC)。一个主要的设计目标是使管理尽可能容易。运行在单个节点上使用Proxmox VE&#xf…

acwing 并查集

目录 并查集的路径压缩两种方法法一法二 AcWing 240. 食物链AcWing 837. 连通块中点的数量示例并查集自写并查集 并查集的路径压缩两种方法 法一 沿着路径查询过程中,将非根节点的值都更新为最后查到的根节点 int find(int x) {if (p[x] ! x) p[x] find(p[x]);r…

LitJson-Json字符串转对像时:整型与字符串或字符串转:整型进的类型不一致的处理

目录 问题描述上代码测试代码各位看官,打赏个1元吧 Json数据格式是大家在游戏开中常量用的一种数据格式,某种程度上可以说是必备的。对unity开发来说,LitJson这个json库应该是被使用最多的json库了。 问题描述 今天说要的其中的这个api: Jso…

【docker】centos7安装harbor

目录 零、前提一、下载离线包二、安装三、访问四、开机自启 零、前提 1.前提是已经安装了docker和docker-compose 一、下载离线包 1. csdn资源:harbor-offline-installer-v2.10.0.tgz 2. 百度云盘(提取码:ap3t):harbo…

YOLOv8 Ultralytics:使用Ultralytics框架进行姿势估计

YOLOv8 Ultralytics:使用Ultralytics框架进行姿势估计 前言相关介绍前提条件实验环境安装环境项目地址LinuxWindows 使用Ultralytics框架进行姿势估计参考文献 前言 由于本人水平有限,难免出现错漏,敬请批评改正。更多精彩内容,可…

*5.1 Global Memory Bandwidth

并行程序的执行速度可能因计算硬件的资源限制而有很大差异。虽然管理并行代码和硬件资源约束之间的交互对于在几乎所有并行编程模型中实现高性能很重要,但这是一种实用技能,最好通过为高性能设计的并行编程模型中的实践练习来学习。在本章中,…

探索大模型时代下的文档识别与分析【GPT4-V带来的挑战与机遇】

中国图象图形学学会青年科学家会议是由中国图象图形学学会青年工作委员会发起的学术会议。本会议面向国际学术前沿与国家战略需求,致力于支持图象图形领域的优秀青年学者,为青年学者们提供学术交流与研讨的平台,促进学者之间的交流与合作。会…

FreeRTOS学习总结(二)FreeRTOS任务创建和删除API函数

实现动态创建任务流程 任务控制块结构体成员介绍 typedef struct tskTaskControlBlock {volatile StackType_t * pxTopOfStack; /* 任务栈栈顶,必须为TCB第一个成员 */ListItem_t xStateListItem; /* 任务状态列表项 */ Li…

Mobile Aloha 【软硬件原理+代码解析】

1. Mobile ALOHA Hardware2. Imitation Learning3. Co-training with Static ALOHA Data4. Task Setting5. Experiments5.1 ACT5.2 对比ACT、Diffusion Policy和VINN 6. Software Code Analyze Mobile ALOHA: 利用低成本全身远程操作系统学习复杂的双手移动操作技能 [译] 硬件代…

SAP BAPI_OUTB_DELIVERY_CONFIRM_DEC 交货单过账提示 VL602 为交货的发货已经计帐

原因 如果尝试从交货处理的初始屏幕过账交货的货物移动,并且已为交货执行此步骤,则系统会正确发出消息 VL602(“已针对交货过账发货”)和/或 VL636(“已过账此入库交货的收货”)。 之后,无法再…

前端入门教程:学完即可单独完成前端项目

目录 目录 1.HTML: 1.1概念 1.2结构 1.3常见的标签使用分类: 2.CSS: 2.1概念 2.2样式实践: 以下的举例都来自于博客: 2.3css选择器: 什么是css选择器: 举例如下: 2.4Demo 3.JavaScript&#…

什么台灯最好学生晚上用?学生晚上用的护眼台灯推荐

随着人们对健康生活的追求日益增加,越来越多的人开始关注眼睛健康问题。而台灯作为人们日常生活和工作中常用的照明设备之一,护眼台灯的出现成为了人们关注的焦点。那么,作为课业负担比较重的学生群体,有什么护眼台灯是适合他们晚…