# 配置
系统默认的配置采用`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插件