使用 Ebean 與 MySQL 建立初始資料庫與管理者帳號的完整流程指南
Copyright Notice: This article is an original work licensed under the CC 4.0 BY-NC-ND license.
If you wish to repost this article, please include the original source link and this copyright notice.
Source link: https://v2know.com/article/1283
前置作業與總覽
是的:先在 MySQL 建一個空的 tsk_db
資料庫(用 UTF-8),再啟用 Ebean 自動建表,啟動一次應用讓它把表結構建出來。
步驟總覽
先建 DB → 配好 application.conf
→ 臨時開啟 Ebean 建表 → 啟動一次 → 關閉自動建表 → 插入初始管理者資料
Step 1:建立資料庫(UTF-8)
連上 MySQL 後執行:
CREATE DATABASE tsk_db DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
建議建立專用帳號並授權(可用 root 也行):
CREATE USER 'tsk_user'@'localhost' IDENTIFIED BY '你的密碼';
GRANT ALL PRIVILEGES ON tsk_db.* TO 'tsk_user'@'localhost';
FLUSH PRIVILEGES;
如果你是 MySQL 8 並用舊版連線器(本專案用 5.1.25),必要時用舊式驗證:
ALTER USER 'tsk_user'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密碼';
Step 2:設定應用連線
調整 application/tsk/conf/application.conf
:
db.default.driver=com.mysql.jdbc.Driver
db.default.url="jdbc:mysql://localhost/tsk_db?characterEncoding=UTF8"
db.default.user=你的帳號
db.default.password=你的密碼
提醒:
保持 characterEncoding=UTF8
(專案原本就這樣寫);若遇到 MySQL 8 時區錯誤,再加 &serverTimezone=Asia/Tokyo
或 UTC
。
Step 3:啟用 Ebean 自動建表(一次性)
在 application/tsk/conf/application.conf
追加兩行:
ebean.ddl.generate=true
ebean.ddl.run=true
掃描包已配置好:application/tsk/conf/application.conf:65
有 ebean.default="models.*"
,不用改。
Step 4:啟動讓它建表
Windows:
cd application\tsk
..\..\play.bat run(或 start)
啟動後 Ebean 會依 app/models
下的 @Entity
自動建立表(如 system_users
, authorities
, documents
等)。
Step 5:關閉自動建表
表建好後,把剛加的兩行移除或改為 false
,避免每次啟動動到 schema。
Step 6:插入初始管理者資料(很重要)
自動建表不會放資料,你需要一筆可登入的管理者:
至少要有 authorities
一筆(admin_authority=1
),以及 system_users
一筆對應該權限。
system_users.password
需存放用同一個 application.secret
做的 AES 密文。
取得密文的簡便方式(二選一):
-
在專案中臨時加一個小工具端點,用
PasswordUtil.encrypt("你的密碼")
生成字串,取得後刪掉端點。 -
或我幫你加一個一次性「初始化種子」端點,首次啟動自動建一個 admin 帳號,完成後再移除。
有了密文後,手動 INSERT
入庫即可完成最小可登入配置。
備註
專案未提供 DDL/seed(僅有查詢用 YAML:application/tsk/conf/sql/*.sql.yml
),所以需用上面流程自建表+補資料。
若看到欄位如 sort
在程式中被使用,但實體類沒有對應欄位,需在 DB 手動補上欄位以符合查詢排序需求(例如多處 orderBy("sort")
)。
This article was last edited at