diff --git a/.github/docker/Dockerfile b/.github/docker/mysql/Dockerfile
similarity index 90%
rename from .github/docker/Dockerfile
rename to .github/docker/mysql/Dockerfile
index 68816cc..1c631d2 100644
--- a/.github/docker/Dockerfile
+++ b/.github/docker/mysql/Dockerfile
@@ -1,7 +1,7 @@
# 该镜像需要依赖的基础镜像
FROM eclipse-temurin:17.0.5_8-jre-jammy
# 设置环境变量
-ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms512m -Xmx512m -Dfile.encoding=utf-8" SPRING_CONFIG="--spring.profiles.active=prod"
+ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms512m -Xmx512m -Dfile.encoding=utf-8" SPRING_CONFIG="--spring.profiles.active=mysql"
# 设置时区
RUN set -eux; \
ln -snf /usr/share/zoneinfo/$TZ /etc/localtime; \
diff --git a/.github/docker/sqlite/Dockerfile b/.github/docker/sqlite/Dockerfile
new file mode 100644
index 0000000..2e7bdb9
--- /dev/null
+++ b/.github/docker/sqlite/Dockerfile
@@ -0,0 +1,14 @@
+# 该镜像需要依赖的基础镜像
+FROM eclipse-temurin:17.0.5_8-jre-jammy
+# 设置环境变量
+ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms512m -Xmx512m -Dfile.encoding=utf-8" SPRING_CONFIG="--spring.profiles.active=sqlite"
+# 设置时区
+RUN set -eux; \
+ ln -snf /usr/share/zoneinfo/$TZ /etc/localtime; \
+ echo $TZ > /etc/timezone
+# 拷贝jar包,并重命名
+COPY ./diyfile-system/target/diyfile-system.jar /diyfile-system.jar
+# 指定docker容器启动时运行jar包
+ENTRYPOINT exec java ${JAVA_OPTS} -jar /diyfile-system.jar ${SPRING_CONFIG}
+# 指定维护者的名字
+MAINTAINER besscroft
diff --git a/.github/workflows/docker-buildx-mysql.yml b/.github/workflows/docker-buildx-mysql.yml
new file mode 100644
index 0000000..6a618cb
--- /dev/null
+++ b/.github/workflows/docker-buildx-mysql.yml
@@ -0,0 +1,43 @@
+name: "Java CI with MySql Multi-arch Docker Image"
+
+on:
+ push:
+ tags:
+ - 'v*'
+
+jobs:
+ docker:
+ name: Running Compile Java Multi-arch Docker Image
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v3
+ - name: Get Version
+ id: get_version
+ run: echo ::set-output name=VERSION::${GITHUB_REF#refs/tags/}
+ - name: Setup Java
+ uses: actions/setup-java@v3
+ with:
+ java-version: '17'
+ distribution: 'temurin'
+ cache: 'maven'
+ - name: Build with Maven
+ run: mvn -B package -Dmaven.test.skip=true --file pom.xml
+ - name: Login to Docker Hub
+ uses: docker/login-action@v2
+ with:
+ username: ${{ secrets.DOCKERHUB_USERNAME }}
+ password: ${{ secrets.DOCKERHUB_TOKEN }}
+ - name: Set up QEMU
+ uses: docker/setup-qemu-action@v2
+ - name: Set up Docker Buildx
+ id: buildx
+ uses: docker/setup-buildx-action@v2
+ - name: Build and push diyfile-mysql version
+ id: docker_build_xanadu_version
+ uses: docker/build-push-action@v3
+ with:
+ context: ./
+ file: ./.github/docker/mysql/Dockerfile
+ platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/ppc64le,linux/s390x
+ push: true
+ tags: ${{ secrets.DOCKERHUB_USERNAME }}/diyfile:${{ steps.get_version.outputs.VERSION }}-mysql
diff --git a/.github/workflows/docker-buildx-test.yml b/.github/workflows/docker-buildx-test.yml
index 8f4bb5b..9f98baf 100644
--- a/.github/workflows/docker-buildx-test.yml
+++ b/.github/workflows/docker-buildx-test.yml
@@ -1,4 +1,4 @@
-name: "Java CI with Multi-arch Docker Image Test"
+name: "Java CI with Multi-arch Docker Test Image"
on:
push:
@@ -32,12 +32,21 @@ jobs:
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v2
- - name: Build and push diyfile test
+ - name: Build and push diyfile sqlite test
id: docker_build_xanadu_test
uses: docker/build-push-action@v3
with:
context: ./
- file: ./.github/docker/Dockerfile
+ file: ./.github/docker/sqlite/Dockerfile
platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/ppc64le,linux/s390x
push: true
- tags: ${{ secrets.DOCKERHUB_USERNAME }}/diyfile:test
+ tags: ${{ secrets.DOCKERHUB_USERNAME }}/diyfile:test-sqlite
+ - name: Build and push diyfile mysql test
+ id: docker_build_xanadu_test
+ uses: docker/build-push-action@v3
+ with:
+ context: ./
+ file: ./.github/docker/mysql/Dockerfile
+ platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/ppc64le,linux/s390x
+ push: true
+ tags: ${{ secrets.DOCKERHUB_USERNAME }}/diyfile:test-mysql
diff --git a/.github/workflows/docker-buildx.yml b/.github/workflows/docker-buildx.yml
index a3adbb1..fcc3692 100644
--- a/.github/workflows/docker-buildx.yml
+++ b/.github/workflows/docker-buildx.yml
@@ -1,4 +1,4 @@
-name: "Java CI with Multi-arch Docker Image"
+name: "Java CI with Sqlite Multi-arch Docker Image"
on:
push:
@@ -37,7 +37,7 @@ jobs:
uses: docker/build-push-action@v3
with:
context: ./
- file: ./.github/docker/Dockerfile
+ file: ./.github/docker/sqlite/Dockerfile
platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/ppc64le,linux/s390x
push: true
tags: ${{ secrets.DOCKERHUB_USERNAME }}/diyfile:${{ steps.get_version.outputs.VERSION }}
@@ -46,7 +46,7 @@ jobs:
uses: docker/build-push-action@v3
with:
context: ./
- file: ./.github/docker/Dockerfile
+ file: ./.github/docker/sqlite/Dockerfile
platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/ppc64le,linux/s390x
push: true
tags: ${{ secrets.DOCKERHUB_USERNAME }}/diyfile:latest
diff --git a/diyfile-common/src/main/java/com/besscroft/diyfile/common/entity/BaseEntity.java b/diyfile-common/src/main/java/com/besscroft/diyfile/common/entity/BaseEntity.java
index 2992c30..bcc823d 100644
--- a/diyfile-common/src/main/java/com/besscroft/diyfile/common/entity/BaseEntity.java
+++ b/diyfile-common/src/main/java/com/besscroft/diyfile/common/entity/BaseEntity.java
@@ -26,12 +26,12 @@ public class BaseEntity implements Serializable {
/** 创建者 */
@Schema(title = "创建者", type = "String")
- @TableField(fill = FieldFill.INSERT)
+ @TableField(fill = FieldFill.INSERT, value = "creator")
private String creator;
/** 更新者 */
@Schema(title = "更新者", type = "String")
- @TableField(fill = FieldFill.INSERT_UPDATE)
+ @TableField(fill = FieldFill.INSERT_UPDATE, value = "updater")
private String updater;
/** 创建时间 */
@@ -39,7 +39,7 @@ public class BaseEntity implements Serializable {
@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
- @TableField(fill = FieldFill.INSERT)
+ @TableField(fill = FieldFill.INSERT, value = "create_time")
private LocalDateTime createTime;
/** 更新时间 */
@@ -47,7 +47,7 @@ public class BaseEntity implements Serializable {
@JsonFormat(locale = "zh", timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
@JsonDeserialize(using = LocalDateTimeDeserializer.class)
@JsonSerialize(using = LocalDateTimeSerializer.class)
- @TableField(fill = FieldFill.INSERT_UPDATE)
+ @TableField(fill = FieldFill.INSERT_UPDATE, value = "update_time")
private LocalDateTime updateTime;
/**
diff --git a/diyfile-common/src/main/java/com/besscroft/diyfile/common/handler/LocalDateTimeTypeHandlerInjector.java b/diyfile-common/src/main/java/com/besscroft/diyfile/common/handler/LocalDateTimeTypeHandlerInjector.java
new file mode 100644
index 0000000..9d56a69
--- /dev/null
+++ b/diyfile-common/src/main/java/com/besscroft/diyfile/common/handler/LocalDateTimeTypeHandlerInjector.java
@@ -0,0 +1,40 @@
+package com.besscroft.diyfile.common.handler;
+
+import cn.hutool.core.convert.Convert;
+import org.apache.ibatis.type.JdbcType;
+import org.apache.ibatis.type.LocalDateTimeTypeHandler;
+import org.apache.ibatis.type.MappedJdbcTypes;
+import org.apache.ibatis.type.MappedTypes;
+import org.springframework.stereotype.Component;
+
+import java.sql.CallableStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.time.LocalDateTime;
+
+/**
+ * @Description LocalDateTime 类型处理器
+ * @Author Bess Croft
+ * @Date 2023/3/2 22:24
+ */
+@Component
+@MappedTypes(LocalDateTime.class)
+@MappedJdbcTypes(value = JdbcType.TIMESTAMP, includeNullJdbcType = true)
+public class LocalDateTimeTypeHandlerInjector extends LocalDateTimeTypeHandler {
+
+ @Override
+ public LocalDateTime getNullableResult(ResultSet rs, String columnName) throws SQLException {
+ return Convert.toLocalDateTime(rs.getObject(columnName));
+ }
+
+ @Override
+ public LocalDateTime getNullableResult(ResultSet rs, int columnIndex) throws SQLException {
+ return Convert.toLocalDateTime(rs.getObject(columnIndex));
+ }
+
+ @Override
+ public LocalDateTime getNullableResult(CallableStatement cs, int columnIndex) throws SQLException {
+ return Convert.toLocalDateTime(cs.getObject(columnIndex));
+ }
+
+}
diff --git a/diyfile-system/pom.xml b/diyfile-system/pom.xml
index 4e8ff0b..64e98d4 100644
--- a/diyfile-system/pom.xml
+++ b/diyfile-system/pom.xml
@@ -19,10 +19,14 @@
diyfile-common
${revision}
-
+
- mysql
- mysql-connector-java
+ com.mysql
+ mysql-connector-j
+
+
+ org.xerial
+ sqlite-jdbc
diff --git a/diyfile-system/src/main/resources/application-dev.yml b/diyfile-system/src/main/resources/application-dev.yml
index c8d83ea..33bf7ff 100644
--- a/diyfile-system/src/main/resources/application-dev.yml
+++ b/diyfile-system/src/main/resources/application-dev.yml
@@ -1,6 +1,6 @@
spring:
datasource:
- driverClassName: com.mysql.jdbc.Driver
+ driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://${DB_URL:localhost:3306}/${DB_NAME:diyfile}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=${DB_SSL:false}
username: ${DB_USERNAME:root}
password: ${DB_PASSWORD:666666}
@@ -32,6 +32,9 @@ mybatis:
# mybatis-plus 配置
mybatis-plus:
+ # 启动 mybatis 本身的 log 日志,但是不建议在生产环境使用,这里仅在开发环境启用,方便排查问题!
+ configuration:
+ log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
logic-delete-field: del # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
diff --git a/diyfile-system/src/main/resources/application-prod.yml b/diyfile-system/src/main/resources/application-mysql.yml
similarity index 98%
rename from diyfile-system/src/main/resources/application-prod.yml
rename to diyfile-system/src/main/resources/application-mysql.yml
index 3e17fb0..38c7442 100644
--- a/diyfile-system/src/main/resources/application-prod.yml
+++ b/diyfile-system/src/main/resources/application-mysql.yml
@@ -1,6 +1,6 @@
spring:
datasource:
- driverClassName: com.mysql.jdbc.Driver
+ driverClassName: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://${DB_URL:localhost:3306}/${DB_NAME:diyfile}?serverTimezone=Asia/Shanghai&characterEncoding=utf8&useSSL=${DB_SSL:false}
username: ${DB_USERNAME:root}
password: ${DB_PASSWORD:666666}
diff --git a/diyfile-system/src/main/resources/application-sqlite.yml b/diyfile-system/src/main/resources/application-sqlite.yml
new file mode 100644
index 0000000..89e900f
--- /dev/null
+++ b/diyfile-system/src/main/resources/application-sqlite.yml
@@ -0,0 +1,93 @@
+spring:
+ datasource:
+ driverClassName: org.sqlite.JDBC
+ url: jdbc:sqlite:doc/data/diyfile.db?date_string_format=yyyy-MM-dd HH:mm:ss
+ hikari:
+ # 连接池最大连接数
+ maximum-pool-size: 20
+ # 空闲时保持最小连接数
+ minimum-idle: 5
+ # 空闲连接存活时间
+ idle-timeout: 300000
+ # 连接超时时间
+ connection-timeout: 5000
+ # 检测连接是否有效
+ connection-test-query: select 1
+ # 缓存
+ cache:
+ type: CAFFEINE
+ caffeine:
+ spec: maximumSize=500,initialCapacity=100,expireAfterAccess=600s
+
+# MyBatis配置
+mybatis:
+ # 搜索指定包别名
+ typeAliasesPackage: com.besscroft.diyfile.common.entity
+ # 配置mapper的扫描,找到所有的mapper.xml映射文件
+ mapperLocations: classpath*:mapper/*Mapper.xml
+ configuration:
+ cache-enabled: false
+
+# mybatis-plus 配置
+mybatis-plus:
+ global-config:
+ db-config:
+ logic-delete-field: del # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
+ logic-delete-value: 0 # 逻辑已删除值(默认为 1)
+ logic-not-delete-value: 1 # 逻辑未删除值(默认为 0)
+
+# Actuator 配置
+management:
+ endpoints:
+ web:
+ exposure:
+ # 监控项配置
+ include: '*'
+ endpoint:
+ health:
+ # 开启显示全部细节
+ show-details: always
+ shutdown:
+ # 启用接口关闭 SpringBoot
+ enabled: false
+ # Micrometer 配置
+ metrics:
+ tags:
+ application: ${spring.application.name}
+
+# SpringDoc 配置
+springdoc:
+ api-docs:
+ enabled: ${DOC_ENABLE:false}
+ path: "/api-docs"
+ swagger-ui:
+ enabled: ${DOC_ENABLE:false}
+ path: "/swagger-ui.html"
+ # 配置扫描的包
+ packagesToScan: com.besscroft.diyfile.controller
+ show-actuator: false
+ cache:
+ disabled: false
+ pre-loading-enabled: true
+
+sa-token:
+ # token名称 (同时也是cookie名称)
+ token-name: Authorization
+ # token前缀
+ token-prefix: Bearer
+ # token有效期,单位s 默认30天, -1代表永不过期
+ timeout: 2592000
+ # token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒
+ activity-timeout: -1
+ # 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
+ is-concurrent: true
+ # 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
+ is-share: true
+ # token风格
+ token-style: uuid
+ # 是否输出操作日志
+ is-log: false
+ # Cookie配置
+ is-read-cookie: false
+ # logo打印
+ isPrint: false
diff --git a/diyfile-system/src/main/resources/mapper/StorageMapper.xml b/diyfile-system/src/main/resources/mapper/StorageMapper.xml
index 2e30e12..d1fda36 100644
--- a/diyfile-system/src/main/resources/mapper/StorageMapper.xml
+++ b/diyfile-system/src/main/resources/mapper/StorageMapper.xml
@@ -134,8 +134,8 @@
remark,
creator,
updater,
- create_time,
- update_time,
+ date(create_time),
+ date(update_time),
del
FROM
storage
diff --git a/doc/data/diyfile.db b/doc/data/diyfile.db
new file mode 100644
index 0000000..49b274e
Binary files /dev/null and b/doc/data/diyfile.db differ
diff --git a/pom.xml b/pom.xml
index af7e85e..8ee345a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -27,7 +27,6 @@
3.0.2
1.5.3.Final
0.2.0
- 5.1.49
3.5.3.1
2.0.2
1.34.0
@@ -95,12 +94,6 @@
mapstruct
${mapstruct.version}
-
-
- mysql
- mysql-connector-java
- ${mysql.version}
-
com.baomidou
@@ -187,17 +180,17 @@
-
+
test
- test
+ mysql
-
+
prod
- prod
+ sqlite