本專案地址:
本專案說明:AgileBoot - 基於SpringBoot + Vue3的前後端快速開發腳手架
優點:
缺點:
因為我想做到使用H2直接啟動專案,所以scope設定為runtime,如果僅用H2做測試用的話,請設定成test
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
# 資料來源設定
spring:
datasource:
# 驅動
driver-class-name: org.h2.Driver
# h2 記憶體資料庫 記憶體模式連線設定 庫名: agileboot
url: jdbc:h2:mem:agileboot;DB_CLOSE_DELAY=-1
h2:
# 開啟console 存取 預設false
console:
enabled: true
settings:
# 開啟h2 console 跟蹤 方便偵錯 預設 false
trace: true
# 允許console 遠端存取 預設false
web-allow-others: true
# h2 存取路徑上下文
path: /h2-console
sql:
init:
platform: mysql
# 初始化資料
schema-locations: classpath:h2sql/agileboot_schema.sql
data-locations: classpath:h2sql/agileboot_data.sql
最後兩行是H2資料庫需要的資料庫結構和資料指令碼檔案,放置在resources資料夾下的h2sql目錄裡(你也可以放在其他目錄)
以下是樣本:
schema.sql
create table sys_config
(
config_id int auto_increment,
config_name varchar(128) default '' not null comment '設定名稱',
config_key varchar(128) default '' not null comment '設定鍵名',
config_options varchar(1024) default '' not null comment '可選的選項',
config_value varchar(256) default '' not null comment '設定值',
is_allow_change int not null comment '是否允許修改',
creator_id int null comment '建立者ID',
creator_name varchar(64) default '' null comment '建立者',
updater_id int null comment '更新者ID',
updater_name varchar(64) default '' null comment '更新者',
update_time datetime null comment '更新時間',
create_time datetime null comment '建立時間',
remark varchar(128) null comment '備註',
deleted int default 0 not 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='引數設定表';
可以發現Mysql的建表語句需要刪除一部分特殊用法,才能在H2執行。H2的建表語句顯得很簡單。
# 如果需要無Mysql 無Redis直接啟動的話 可以將這個引數置為true, 並且spring.profile.active: dev換成test
agileboot:
embedded-test: false
因為專案可以選擇使用Mysql啟動也可以使用H2啟動,Spring的設定會有衝突。所以使用agileboot.embedded-test的值來決定啟動Mysql相關的Bean還是H2相關的Bean.
Spring提供了@ConditionalOnExpression註解基於條件來初始化bean
@Bean
@ConfigurationProperties("spring.datasource.druid.master")
@ConditionalOnExpression("'${agileboot.embedded-test}' != 'true'")
public DataSource masterDataSource(DruidProperties druidProperties) {
DruidDataSource dataSource = DruidDataSourceBuilder.create().build();
return druidProperties.dataSource(dataSource);
}
<dependency>
<groupId>it.ozimov</groupId>
<artifactId>embedded-redis</artifactId>
<version>0.7.3</version>
<!-- 不排除掉slf4j的話 會衝突-->
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
</exclusion>
</exclusions>
</dependency>
@Configuration
@ConditionalOnExpression("'${agileboot.embedded-test}' == 'true'")
public class EmbeddedRedisConfig {
@Value("${spring.redis.port}")
private Integer port;
private RedisServer redisServer;
@PostConstruct
public void postConstruct() {
RedisServer redisServer = RedisServer.builder().port(port)
.setting("maxheap 32M")
.setting("daemonize no")
.setting("appendonly no").build();
this.redisServer = redisServer;
redisServer.start();
}
@PreDestroy
public void preDestroy() {
redisServer.stop();
}
}
同理,我們使用agileboot.embedded-test的值來決定啟動內建的Redis.
該設計實現在AgileBoot專案內,有興趣的小夥伴可以專案down下來看下~
幾行指令即可run起前後端專案。
後端專案僅需把yml的這兩個設定改一下即可。
前後端全棧技術交流群:1398880
歡迎前後端萌新大佬加群討論~~