AgileBoot - 如何集成內置數據庫H2和內置Redis

本項目地址:

  • github: https://github.com/valarchie/AgileBoot-Back-End
  • gitee: https://gitee.com/valarchie/AgileBoot-Back-End
本項目說明:AgileBoot - 基于SpringBoot + Vue3的前后端快速開發腳手架
背景介紹為什么我們需要內置的數據庫和Redis呢?
優點:
  • 內置的數據庫H2,可以讓我們在無依賴數據庫的情況下,做集成測試 。比如我們想測試添加一個學生到數據庫,就需要啟動一臺數據庫來驗證結果 。然而使用H2內置數據庫的話 , 就可以在無依賴數據庫的情況下 , 進行驗證 。
  • 數據庫H2是內存級的,如果有大量集成測試(IT:Integration Test)的話,可以縮短測試時間 。
  • Embedded Redis同上,使我們在無依賴Redis的情況下,做測試 。
  • 還有一個小優點,就是對于新手或者不熟悉后端的前端小伙伴來說,他們在可以不配置Mysql和Redis就直接把整個項目run起來~
缺點:
  • H2并不能兼容所有數據庫的功能,比如函數,或者一些特殊索引之類的 。使用H2的話 , Mysql的表結構不能直接導入,需要做一些調整 。
  • Embeded Redis同樣不能完全兼容真正的Redis, 一些特殊用法可能會出錯 。
引入H2數據庫代碼實現1.引入內置的H2數據庫因為我想做到使用H2直接啟動項目,所以scope設置為runtime,如果僅用H2做測試用的話,請設置成test
<dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency>2.yml文件內數據庫的配置 , 改成H2# 數據源配置spring:datasource:#驅動driver-class-name: org.h2.Driver# h2 內存數據庫 內存模式連接配置 庫名: agilebooturl: jdbc:h2:mem:agileboot;DB_CLOSE_DELAY=-1h2:# 開啟console 訪問 默認falseconsole:enabled: truesettings:#開啟h2 console 跟蹤 方便調試默認 falsetrace: true#允許console 遠程訪問 默認falseweb-allow-others: true#h2 訪問路徑上下文path: /h2-consolesql:init:platform: mysql# 初始化數據schema-locations: classpath:h2sql/agileboot_schema.sqldata-locations: classpath:h2sql/agileboot_data.sql最后兩行是H2數據庫需要的數據庫結構和數據腳本文件,放置在resources文件夾下的h2sql目錄里(你也可以放在其他目錄)以下是樣本:schema.sql
create table sys_config(config_idint auto_increment,config_namevarchar(128)default '' not null comment '配置名稱',config_keyvarchar(128)default '' not null comment '配置鍵名',config_optionsvarchar(1024) default '' not null comment '可選的選項',config_valuevarchar(256)default '' not null comment '配置值',is_allow_change intnot null comment '是否允許修改',creator_idintnull comment '創建者ID',creator_namevarchar(64)default '' null comment '創建者',updater_idintnull comment '更新者ID',updater_namevarchar(64)default '' null comment '更新者',update_timedatetimenull comment '更新時間',create_timedatetimenull comment '創建時間',remarkvarchar(128)null comment '備注',deletedintdefault 0not null comment '邏輯刪除');data.sql
-- ------------------------------ Records of sys_config-- ----------------------------INSERT INTO `sys_config` VALUES ('1', '主框架頁-默認皮膚樣式名稱', 'sys.index.skinName', '["skin-blue","skin-green","skin-purple","skin-red","skin-yellow"]', 'skin-blue', '1', null, 'admin', null, '', '2022-08-28 22:12:19', '2022-05-21 08:30:55', '藍色 skin-blue、綠色 skin-green、紫色 skin-purple、紅色 skin-red、黃色 skin-yellow', '0');INSERT INTO `sys_config` VALUES ('2', '用戶管理-賬號初始密碼', 'sys.user.initPassword', '', '1234567', '1', null, 'admin', null, '', '2022-08-28 21:54:19', '2022-05-21 08:30:55', '初始化密碼 123456', '0');INSERT INTO `sys_config` VALUES ('3', '主框架頁-側邊欄主題', 'sys.index.sideTheme', '["theme-dark","theme-light"]', 'theme-dark', '1', null, 'admin', null, '', '2022-08-28 22:12:15', '2022-08-20 08:30:55', '深色主題theme-dark,淺色主題theme-light', '0');INSERT INTO `sys_config` VALUES ('4', '賬號自助-驗證碼開關', 'sys.account.captchaOnOff', '["true","false"]', 'false', '0', null, 'admin', null, '', '2022-08-28 22:03:37', '2022-05-21 08:30:55', '是否開啟驗證碼功能(true開啟,false關閉)', '0');INSERT INTO `sys_config` VALUES ('5', '賬號自助-是否開啟用戶注冊功能', 'sys.account.registerUser', '["true","false"]', 'true', '0', null, 'admin', '1', 'admin', '2022-10-05 22:18:57', '2022-05-21 08:30:55', '是否開啟注冊用戶功能(true開啟,false關閉)', '0');這邊需要注意一點,H2只支持最簡單的建表語句 。比如索引、engine、charset、排序之類的都無法執行 。以下是我Mysql的建表語句供你參考
CREATE TABLE `sys_config` (`config_id` int NOT NULL AUTO_INCREMENT COMMENT '參數主鍵',`config_name` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '配置名稱',`config_key` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '配置鍵名',`config_options` varchar(1024) NOT NULL DEFAULT '' COMMENT '可選的選項',`config_value` varchar(256) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL DEFAULT '' COMMENT '配置值',`is_allow_change` tinyint(1) NOT NULL COMMENT '是否允許修改',`creator_id` bigint DEFAULT NULL COMMENT '創建者ID',`creator_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '創建者',`updater_id` bigint DEFAULT NULL COMMENT '更新者ID',`updater_name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '更新者',`update_time` datetime DEFAULT NULL COMMENT '更新時間',`create_time` datetime DEFAULT NULL COMMENT '創建時間',`remark` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '備注',`deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '邏輯刪除',PRIMARY KEY (`config_id`),UNIQUE KEY `config_key_uniq_idx` (`config_key`) USING BTREE) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='參數配置表';

推薦閱讀