ZFile学习笔记——启动!
项目介绍 ZFile 是一个适用于个人或小团队的在线网盘程序,可以将多种存储类型统一管理,再也不用登录各种网站管理文件,现在你只需要在 ZFile 中畅快使用!——GitHub README 我第一次见到这个项目是在折腾LG手机刷机的时候发现的,有人用它托管刷机包。后来我自己把它部署到服务器上试了一下,发现可以很方便的挂载OneDrive,并且可以直接生成下载链接。 最近在学习Java项目,但是网上找到的学习项目都是玩具项目(黑马全家桶、各种知识星球项目),他们很多都存在功能简陋、代码不规范、没有完善的配套前端等等问题……最重要的是项目的需求和功能都是虚拟的,根本没有实际意义。于是想到了之前用过的ZFile恰好就是用Java开发的,并且复杂程度貌似并不高🤨(我猜的),用来学习实际的Java项目岂不是完美? ZFile使用的技术 把项目从GitHub上克隆下来后我首先查看了maven的配置文件pom.xml,从中可以查看该项目所使用到的技术。 1. SpringBoot与Java版本 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.3.2</version> <relativePath/> <!-- 不要去本地找父 POM,而是直接去仓库下载它 --> </parent> ... <java.version>21</java.version> <maven.compiler.source>21</maven.compiler.source> <maven.compiler.target>21</maven.compiler.target> 使用Spring Boot 3.3.2作为基础框架并使用Java 21,表明这个项目的技术是比较新的。 2.依赖 依赖分为几大类,反映了项目的功能模块和技术栈: Spring Boot相关 spring-boot-starter-web: 提供Web开发支持,用于构建RESTful API或Web应用。 spring-boot-starter-aop: 支持面向切面编程(AOP),用于日志、事务等横切关注点。 spring-boot-configuration-processor: 生成配置元数据,支持Spring Boot的自动配置。 spring-boot-starter-data-redis: Redis支持,可能用于缓存或会话管理。 spring-boot-starter-cache: 提供缓存支持,可能与Redis结合使用。 spring-boot-starter-thymeleaf: Thymeleaf模板引擎,用于服务端渲染HTML页面。 spring-boot-starter-validation: Hibernate Validator,用于参数校验。 数据库相关 mysql-connector-j: MySQL数据库驱动(运行时依赖)。 sqlite-jdbc: SQLite数据库驱动,支持轻量级数据库。 flyway-core, flyway-mysql: Flyway数据库迁移工具(版本10.12.0),用于数据库版本管理和Schema迁移。 mybatis-plus-spring-boot3-starter: MyBatis-Plus(版本3.5.6),增强型ORM框架,简化数据库操作。 存储策略相关 upyun java-sdk: 又拍云存储SDK。 software.amazon.awssdk:s3: AWS S3存储支持。 qiniu-java-sdk: 七牛云存储SDK。 jsch: SSH/SFTP支持,可能用于文件传输。 sardine: WebDAV协议支持。 google-api-client: Google API客户端,可能用于Google Drive等存储服务。 认证/权限 sa-token-spring-boot3-starter: Sa-Token(版本1.38.0),轻量级认证授权框架,可能用于用户登录、权限管理和会话控制。 API文档 knife4j-openapi3-jakarta-spring-boot-starter: Knife4j(版本4.5.0),基于OpenAPI 3的API文档生成工具,提供交互式API文档。 工具类 hutool-all: Hutool工具库,提供丰富的Java工具方法。 poi-ooxml: Apache POI,用于处理Excel、Word等Office文档。 commons-compress: 文件压缩/解压支持。 lombok: 简化Java代码(如自动生成Getter/Setter)。 commons-net: 网络工具库,支持FTP、Telnet等协议。 okhttp: HTTP客户端,用于网络请求。 fastjson2: JSON处理库,性能优异。 guava: Google Guava工具库,提供集合、缓存等功能。 mapstruct: 对象映射工具,简化DTO与实体转换。 commons-chain: 责任链模式实现。 totp: 时间戳一次性密码(TOTP),可能用于双因素认证。 jcommander: 命令行参数解析。 json: JSON处理库。 httpclient5, httpmime: Apache HttpClient,支持HTTP请求和文件上传。 bcprov-jdk15on: Bouncy Castle加密库,支持加密操作。 spring-retry: Spring重试机制,处理失败重试逻辑。 commons-fileupload: 文件上传支持。 dns-cache-manipulator: DNS缓存操作,可能用于优化网络请求。 oshi-core: 系统监控库,用于获取系统资源信息。 GraalVM支持 graal-sdk: GraalVM SDK(版本24.1.0,provided scope),用于支持GraalVM原生镜像编译。 构建配置() 插件 spring-boot-maven-plugin: Spring Boot构建插件,支持打包可执行JAR。 maven-compiler-plugin: 配置Java 21编译,启用MapStruct、Lombok等注解处理器。 flyway-maven-plugin: Flyway数据库迁移插件,用于执行数据库迁移任务。 Profiles 使用 native-maven-plugin(GraalVM构建工具)。 配置了特定的JVM参数和构建参数(如-march=compatibility, AddAllCharsets等)。 启用了自定义的AOT(Ahead-of-Time)特性,包括Lambda、加密(Bouncy Castle)和SQLite支持。 项目支持GraalVM原生编译,以提高启动性能和降低内存占用。 ZFile的功能 在深入ZFile的源码之前我打算先把它的基本功能搞清楚,然后按照不同的功能模块分别去细致地学习代码实现。 ...