# 配置
系統默認的配置采用`yml`格式,保存在定義常量的`RES_DIR`位置,并分為多個優先級的配置。
## 框架定義的配置優先級
這里展示完整的配置優先級策略Deep代表深度,淺層覆蓋深層配置。
~~~
//手動設置的Config配置
const ConfigDeep = 10;
//bootstrap.yml
const BootstrapDeep = 9;
//application.yml
const ApplicationDeep = 8;
//application-active.yml
const ApplicationActiveDeep = 7;
//遠程全局Application配置
const ConfigServerGlobalApplicationDeep = 6;
//遠程Application配置
const ConfigServerApplicationDeep = 5;
//遠程Application/Active配置
const ConfigServerApplicationActiveDeep = 4;
~~~
## 配置優先級
>[danger] 最高優先級會覆蓋最低優先級的配置。
~~~
├─resources 應用目錄
│ ├─bootstrap.yml 最低
│ ├─application.yml 中
│ ├─application-ENV.yml 最高
~~~
配置加載的順序為(1->2->3)bootstrap->application->application-ENV
> 如果希望修改配置文件的位置,可以在入口文件中定義獨立的配置目錄,修改`RES_DIR`常量定義即可,例如:
~~~php
define("RES_DIR", __DIR__ . "/conf");
~~~
## 配置文件隔離
在` bootstrap.yml`或`application.yml`配置 中增加以下配置, 修改對應的`active` 值,如`active` 為`local` 即加載application-local.yml 文件。依照`Deep`深度覆蓋規則,`application-local.yml`將覆蓋之前的配置。
~~~
esd:
profiles:
active: local
~~~
## ${XXX:YYY}表達式
配置中支持${XXX}和${XXX:YYY}表達式,其中XXX會優先從PHP的常量定義中獲取,如果沒有則會去尋找系統環境變量,如果依舊沒有會在已有的配置中尋找值,最終沒有找到會返回YYY。
> ${ROOT_DIR} 將會返回常量ROOT_DIR定義的值
> ${ESD_ENV} 假設定義了環境變量ESD_ENV將會返回環境變量ESD_ENV的值
> ${ESD_ENV:local} 假設沒有定義變量ESD_ENV將會返回local
> ${esd.server.name} 將會返回yml中對應的值
## 通過環境變量切換配置文件
在系統中增加環境變量 ` export ESD_ENV=local` ,在 application.yml 2級配置 中修改以下配置,
~~~
esd:
profiles:
active: ${ESD_ENV:local}
~~~
即讀取系統環境變量 `ESD_ENV` 中的值,`local`為系統環境變量不存在時使用的默認值。
## 環境變量常駐
修改用戶的 `.profile` 文件或者 `.bash_profile` ,在其中增加 `ESD_ENV=local` ,執行命令刷新配置文件 `source .profile` 或 `source .bash_profile` 。
## 獲取環境變量
```
${ESD_ENV:local} //代表獲取ESD_ENV環境變量,如果找不到則為local
${ESD_ENV} //如果你確定存在那么可以不指定默認值。
${esd.name:test} //代表獲取配置中esd.name的值獲取不到則為test
//同理
${esd.name}
//可以寫的更為復雜
my:
consule_name: ${esd.name}-${esd.port.http.name}
```
## 獲取常量
~~~
${ROOT_DIR}
~~~
## 例子
如果打開了Debug日志框架啟動過程中會打印合并后的配置
``` yaml
esd:
logger:
name: log
level: debug
output: "%datetime% \e[32mDEBUG \e[0m : %message% %context% \n"
date_format: 'Y-m-d H:i:s'
allow_inline_line_breaks: true
ignore_empty_context_and_extra: true
color: true
max_files: 5
server:
name: demo
http_parse_post: true
http_compression: true
debug: true
banner: "\n ________ ______ ______ \n |_ __ | .' ____ \\ |_ _ `. \n | |_ \\_| | (___ \\_| | | `. \\ \n | _| _ _.____`. | | | | \n
_| |__/ | | \\____) | _| |_.' / \n |________| \\______.' |______.' \n "
worker_num: 1
max_conn: 1024
port:
http:
controller_name_space: ESD\Examples\Controller
auto_json: true
pack_tool: ESD\Plugins\EasyRoute\PackTool\LenJsonPack
route_tool: ESD\Plugins\EasyRoute\RouteTool\NormalRoute
index_controller_name: CUser
name: http
host: 0.0.0.0
port: 8081
sock_type: 1
open_http_protocol: true
ws_opcode: 1
process:
helper:
name: helper
class_name: ESD\Plugins\Scheduled\HelperScheduledProcess
group_name: HelperGroup
task-1:
class_name: ESD\Go\GoProcess
group_name: TaskGroup
profiles:
active: local
console:
cmd_class_list:
_test_cmd: ESD\Plugins\PHPUnit\TestCmd
_reload_cmd: ESD\Plugins\Console\Command\ReloadCmd
_restart_cmd: ESD\Plugins\Console\Command\RestartCmd
_start_cmd: ESD\Plugins\Console\Command\StartCmd
_stop_cmd: ESD\Plugins\Console\Command\StopCmd
aop:
include_paths:
.src._go: /mnt/c/Users/administrato/PhpstormProjects/go-swoole/src/Go
0: /mnt/c/Users/administrato/PhpstormProjects/esd/examples/src
.src: /mnt/c/Users/administrato/PhpstormProjects/go-swoole/src
.vendor.esd.base-server: /mnt/c/Users/administrato/PhpstormProjects/go-swoole/vendor/esd/base-server
cache_dir: /mnt/c/Users/administrato/PhpstormProjects/go-swoole/bin/cache/aop
whoops:
enable: true
cache:
timeout: 1800
db: default
cache_storage_class: ESD\Plugins\Cache\RedisCacheStorage
lock_wait: 100
lock_alive: 10000
security: { }
reload:
enable: false
monitor_dir: /mnt/c/Users/administrato/PhpstormProjects/go-swoole/src
saber:
redirect: 3
content_type: application/json
keep_alive: true
timeout: 5
ssl_allow_self_signed: true
exception_report: 63
retry_time: 3
use_pool: true
scan:
include_paths:
.src: /mnt/c/Users/administrato/PhpstormProjects/go-swoole/src
session:
timeout: 1800
db: default
session_storage_class: ESD\Plugins\Session\RedisSessionStorage
path: /
session_name: SESSIONID
http_only: true
scheduled:
min_interval_time: 1000
mysql:
default:
host: mysql-aliyun.dev.svc.cluster.local
username: huiyi
password: huiyi@123
db: huiyi_analysis
prefix: t_
redis:
default:
host: redis-master.dev.svc.cluster.local
```
* [YAML快速入門](http://www.ruanyifeng.com/blog/2016/07/yaml.html)
* [YAML語法檢查](http://nodeca.github.io/js-yaml/)
- 前言
- 捐贈ESD項目
- 使用篇-通用
- 環境
- 安裝
- 規范
- 壓力測試
- 配置
- 如何設置YML配置
- server配置
- 端口配置
- 項目結構
- 事件派發
- 日志
- 注解
- DI容器
- 自定義進程
- 并發及協程池
- Console插件
- Scheduled插件
- Redis插件
- AOP插件
- Saber插件
- Mysql插件
- mysql事務
- Actuator插件
- Whoops插件
- Cache插件
- PHPUnit插件
- Security插件
- Session插件
- EasyRoute插件
- http路由
- ProcessRpc插件
- AutoReload插件
- AnnotationsScan插件
- Tracing-plugin插件
- MQTT插件
- Pack插件
- AMQP插件
- Validate插件
- Uid插件
- Topic插件
- Blade插件
- CsvReader插件
- hashed-wheel-timer-plugin插件
- 使用篇-HTTP
- 路由
- 靜態文件
- 路由定義
- 修飾方法
- 路由分組
- 資源路由
- 端口作用域
- 異常處理
- 跨域請求
- 路由緩存
- 控制器
- 控制器初始化
- 前置操作
- 跳轉和重定向
- 異常處理
- 請求
- 請求對象
- 請求信息
- request消息
- response消息
- stream消息
- url接口
- 驗證器
- 內置驗證器
- 內置過濾器
- 使用篇-WS
- 如何使用
- 路由
- 使用篇-TCP
- 插件篇-PluginSystem
- 微服務篇-ESDCloud
- CircuitBreaker插件
- SaberCloud插件
- 分布式鏈路追蹤系統
- Consul插件