Spring BootReactLuceneSQLiteTa

lxf2023-07-20 18:00:01

项目概况

前阵子我开源系统了一个项目——Huntly,它是一个信息化管理专用工具,不但可以自代管,还可以通过手机客户端在本地运作。

先简单介绍一下这是个什么样的东西,生活中有下列作用:

  • RSS 定阅。
  • 网页页面个人收藏,全自动/手动式储存访问完的网页页面,接着以储存、稍候读、个人收藏或归档的形式将其储存。
  • 文章储存,对于推特网站有独特的解决,会自动备份要求完的推文 timeline,纪录是不是访问过,在 huntly 中我们乃至可以使用更高效的方法再次查询这种文章。
  • 具体内容全文检索,能从文章标题、具体内容、种类、个人收藏方法等多个维度点击搜索。
  • 联接特色服务,现阶段适用 GitHub,因此它也是一个 Github stars 可视化工具。

系统软件截屏

Spring BootReactLuceneSQLiteTa

Spring BootReactLuceneSQLiteTa

有兴趣的读者朋友能够使用下列。

关键技术栈

之上仅仅简单介绍一下这样的项目,写这篇主要目的是分享一下在其中所用过的技术性。

这是一个为自己使用的服务项目,不属于分布式系统云计算等情景,可能就不存在任何深奥技术性,可是它需要用到的技术栈却还是算丰富多彩,算得上是麻雀虽小五脏俱全。

通过学习该项目的源代码,你没法成为一个高手,但却可以对在其中需要用到的许多技术性有一个快速地掌握。

这样的项目需要用到的关键技术栈有:

  • Spring Boot
  • React
  • Lucene
  • SQLite
  • Tauri

应用过的计算机语言有:

  • Java
  • TypeScript
  • Rust

Spring Boot 服务器端

服务器端选用简单单体架构,如下图:

Spring BootReactLuceneSQLiteTa

选用 JPA 操作数据库,默认设置应用 SQLite 数据库系统,应用 Lucene 部件和 IK 分词器去进行全文索引。

应用 Springfox 给予 OpenApi 文本文档,前面应用 OpenAPI-Generator 专用工具形成 API 启用编码。

应用 frontend-maven-plugin 软件将 React 前端资源装包到 Jar 库中。

将前端资源装包到 Jar 库中,必须解决好前面 Url 的路由器投射,归功于 Spring Boot 强悍的路由规则,新创建一个 ReactAppController 就可以,下边代码将 /api 开始之外的要求就交给核心技术的 index.html 解决,并实现核心技术的恰当路由器。

@Controller  
@ApiIgnore  
public class ReactAppController {  
    @RequestMapping(value = {"/", "/{x:[\\w\\-] }", "/{x:^(?!api$).*$}/**/{y:[\\w\\-] }"})  
    public String getIndex() {  
        return "/index.html";  
    }  
}

React 前面

款式层面,使用了 MUITailwindCSS 混合使用,MUI 提供了大量的部件,TailwindCSS 也可以在很大程度上提高款式撰写高效率。

插口层面,在 package.json 中加入 api-generate 脚本制作用以形成 api 启用编码,启用时当地开发设计服务器端应为工作状态。

"scripts": {  
  "api-generate": "cd ./src/api/ && openapi-generator-cli generate -i http://localhost:8080/v3/api-docs -g typescript-axios -o ."
}

数据统计,使用了 react-query 部件,针对简单运用还没需要使用状态管理,应用 react-query 能够减少编码量。

表格管理方法,使用了 formikyup 部件,formik 很灵便,能够以及各种 UI 架构配合使用,组合 yup 认证表格。

还使用一些实用的桌面小组件,如:momentreact-beautiful-dndreact-photo-view 等,实际应用请看源码。

Tauri 手机客户端

其实一开始使用的是 electron,也可以在 React 前面里看到一部分 electron 代码,最终认为在手机客户端展现本来是网址的页面有一些不必要,它没法运用电脑浏览器上的各种软件,不符个人用户习惯,因此改成了 Tauri,Tauri 装包的体积比 electron 要低许多,因为他不内置浏览器兼容性。

最后的手机客户端包括一个服务器端设置页面、自动运行和拖盘标志。自然,如果要把 Huntly 的前端界面在这其中表明,使其看上去更像一个手机客户端是并不一定新增加什么代码的,只不过是在这一场景中,我觉得没必要。

Spring BootReactLuceneSQLiteTa

将 Spring Boot Fat Jar、JRE11 装包进手机客户端,最后还不到 120MB,是一个彻底能接受的尺寸,下载链接:Release v0.3.5 · lcomplete/huntly · GitHub。

选用 jlink 指令来装包 JRE:

jlink --module-path $JAVA_HOME/jmods --add-modules java.compiler,java.sql,java.naming,java.management,java.instrument,java.rmi,java.desktop,jdk.internal.vm.compiler.management,java.xml.crypto,java.scripting,java.security.jgss,jdk.httpserver,java.net.http,jdk.naming.dns,jdk.crypto.cryptoki,jdk.unsupported --verbose --strip-debug --compress 2 --no-header-files --no-man-pages --output jre11

Tauri 是一个新型的手机客户端架构,它对比 electron 有一些优点,但是目前不算平稳,这一点应注意。

项目构建

选用 GitHub Actions 去进行完整的搭建,实际请参阅开放源码 Huntly workflows。

本站是一个以CSS、JavaScript、Vue、HTML为中心的前端开发技术网址。我们的使命是为众多前端工程师者提供全方位、全方位、好用的前端工程师专业知识和技术服务。 在网站上,大家可以学到最新前端开发技术,掌握前端工程师最新发布的趋势和良好实践。大家提供大量实例教程和实例,让大家可以快速上手前端工程师的关键技术和程序。 本站还提供了一系列好用的工具软件,帮助你更高效地开展前端工程师工作中。公司提供的一种手段和软件都要经过精心策划和改进,能够帮助你节约时间精力,提高研发效率。 此外,本站还拥有一个有活力的小区,你可以在社区里与其它前端工程师者沟通交流技术性、交流经验、处理问题。我们坚信,街道的能量能够帮助你能够更好地进步与成长。 在网站上,大家可以寻找你需要的一切前端工程师网络资源,使您成为一名更加出色的网页开发者。欢迎你添加我们的大家庭,一起探索前端工程师的无限潜能!