專案檔案路徑架構
在 UDE 架構下,建議每一個專案規劃以下系統目錄用於存放檔案,這些目錄的路徑,也都是UDE內預設的環境變數。 各類目錄下的第一層 ./UDE/ 目錄,原則上保留給 UDE framework使用,在規劃設計專案時,請避免使用。
UDE 路徑 | 預設路徑 | 說明 |
---|---|---|
${global.config.path} | ${BASEDIR}/GLOBAL/global-config/ | 掛載多個專案時,共用的設定檔案 |
${global.resource.path} | ${BASEDIR}/GLOBAL/global-resource/ | 掛載多個專案時,共用的資源檔案 |
${global.data.path} | ${BASEDIR}/GLOBAL/global-data/ | 掛載多個專案時,共用的資料檔案 |
${config.path} | ${BASEDIR}/ap-folder/config | 個別專案的設定 |
${resource.path} | ${BASEDIR}/ap-folder/resource | 個別專案的資源檔案 |
${data.path} | ${BASEDIR}/ap-folder/data | 個別專案的資料檔案 |
${temp.path} | ${BASEDIR}/ap-folder/temp | 個別專案的暫用檔案 |
${log.path} | ${BASEDIR}/ap-folder/log | 個別專案的log目錄 |
${global.config.path}
通常放置與系統環境相關的設定檔,這些設定可能在開發環境、SIT環境、正式環境下各有不同,例如資料庫連線方式、LOG 記錄方式。一般會把這部分的資源納入版本管理,但是在發行、佈版時,可能會做一些額外的客製參數置換處理(如機敏性設定值、伺服器IP)。
${global.resource.path} / ${resource.path}
存放共用的資源檔案。一般來說會納入版本管理,以便隨同版更發佈適當內容。
如果專案中包含多個子系統,而且包裝為不同的WAR檔掛載,比方區分為前台/後台應用系統。這種情況下,共用資源檔案,像是檔案大小較大的字型檔,可以放在 ${global. resource.path}。個別專案使用的資源檔案,就放在 ${ resource.path} 下。
部分資源檔案類型可能會同時存在共用及專案路徑下,如代碼檔、寄發電子郵件範本,端看專案規劃方式決定。
${config.path}
${config.path} 放置單一專案所使用的設定檔,而且這部分的設定資料應與環境無關。盡可能使發行、佈版時,此部分的檔案內容可以不用再異動。
必要時可以在 ${global.config.path}下的設定檔定義環境變數,於此再使用環境變數以增加使用彈性。
一般來說,這部分的資源會納入版本管理。
${global.data} / ${data.path}
系統運作過程中的產出資料檔案,原則上同一個專案下的多個子系統,可以存取同一個 ${global.data.path}目錄,可作為資料交換用。
而同一個子系統若佈署在多台不同的主機上做負載平衡,${data.path}目錄應掛載同一個NFS,或用其它抄寫機制,以做為共用資料存取。例如 USER 在 SERVER1 上傳的圖片,之後改登入到 SERVER2 時也應該要看得到。
通常這部分的檔案不會納入版本管理。而在正式環境中,應該有其它檔案同步備份的機制以確保資料不會遺失。
${temp.path} / ${log.path}
都是個別專案所使用目錄,原則上都在主機上的local檔案系統,存取速度較快。 ${temp.path} 路徑下不會放置需要保留的檔案,也會為其規劃週期較短的檔案清理機制。
UDE 風格的發行管理
- BASEDIR: 一般下載整個專案後,第一層的 BASEDIR 目錄,即是可供開發人員使用的開發環境設定。
- BASEDIR/[專案目錄] :
Root
│
├──BASEDIR
│ │
│ ├──GLOBAL
│ │ ├──global_config // ${global.config.path} 共用設定檔案
│ │ ├──global_resource // ${global.resource.path} 共用資源檔案
│ │ ├──global_data // ${global.data.path} 共用資料檔案 (不入版控)
│ │ └──projects // 所有專案 systemProperties 放置目錄
│ │
│ ├──APP1
│ │ ├── log // ${log.path} 個別專案log目錄 (不入版控)
│ │ ├── tmp // ${temp.path} 個別專案暫用檔案 (不入版控)
│ │ ├── resource // ${resource.path} 個別專案資源檔案
│ │ ├── data // ${data.path} 個別專案資料檔案
│ │ └── config // ${config.path} 個別專案設定檔案
│ ├──APP2
│ │ ├── ...
│ │ └── config
│ └──APP3
│ ├── ...
│ └── config
BASEDIR_RELEASE:針對不同環境的 DEPLOY,可以把需要覆蓋的設定檔,置於 BASEDIR_RELEASE/[SIT|UAT|PROD]/... 等路徑下,並自行撰寫相關佈署工具,在 DEPLOY 時蓋過原先 BASEDIR 下的同名檔案,也可在此時針對檔案內容進行變數內容代換。
例如:SIT SERVER A 只需要佈署 APP1、APP2,則佈署工具的行為大致如下:
- COPY BASE/GLOBAL、BASE/APP1、BASE/APP2 到 SERVER 上的目的路徑
- 取得 BASEDIR_RELEASE/SIT/GLOBAL、BASEDIR_RELEASE/SIT/APP1、BASEDIR_RELEASE/SIT/APP2 內容,進行變數內容代換、最後複製到 SERVER 上的目的路徑。
- 佈署相關 war 或 jars。
- 當然,啟動SERVER時,必須指定 -DBASEDIR 到 SERVER 上的目的路徑。
│
├──BASEDIR_RELEASE
│ │
│ ├──SIT
│ │ ├──GLOBAL
│ │ │ ├──global_config
│ │ │ ├──global_resource
│ │ │ └──projects
│ │ │
│ │ ├──APP1
│ │ │ ├── resource
│ │ │ └── config
│ │ │
│ │ └──APP2
│ │ └── config
│ ├──UAT
│ │ ├──GLOBAL
│ │ │ ├──global_config
│ │ │ ├──global_resource
│ │ │ └──projects
│ │ │
│ │ ├──APP1
│ │ │ ├── resource
│ │ │ └── config
│ │ │
│ │ └──APP2
│ │ └── config
│ └──PROD
│ ├──GLOBAL
│ │ ├──global_config
│ │ ├──global_resource
│ │ └──projects
│ │
│ ├──APP1
│ │ ├── resource
│ │ └── config
│ │
│ └──APP2
│ └── config
│
- 以下是個別專案原始碼的目錄,就依專案需求自行規劃。
├──APP1-PROJECT
│ │ pom.xml
│ └──src
│
├──APP2-PROJECT
│ │ pom.xml
│ └──src
│
└──APP3-PROJECT
│ pom.xml
└──src