odoo18启动流程
odoo18启动流程
第一阶段:命令行解析与参数配置
执行 odoo-bin 命令
1.入口点 : odoo-bin (主程序是 odoo-bin
,不是 odoo.py
)
2.命令行参数解析
3.配置文件读取
4.创建按odoo.tools.config 单例
所有配置被存储在一个全局 单例的config对象中.odoo的整个生命周期内都可以被访问
第二阶段: 预初始化和模块管理设置
基础准备工作
5.确定加载路径:
odoo.conf 文件中 --addons-path 参数,确定扫描的模块目录
6.预加载模块
导入核心模块: base web
第三阶段: 服务器与数据库连接
7.初始化服务器对象:
创建 odoo.service.server
模块中的全局 Server
对象。这个对象是 Odoo 服务器的核心管理器
8.设置数据库连接:
odoo.conf 文件中 db_host db_port db_name....
第四阶段: 模块加载与注册表构建
启动核心
9.加载模块图:
Odoo会扫描 addons-path 中的所有目录,识别有效的模块(包含 __ manifest__.py 的文件夹).
(每个新建模块下都会有一个 __ init__.py 和 __ __ manifest__.py 文件)
然后,解析每个模块的 depends 清单,构建一个完整的模块依赖图.
10.初始化注册表:
Registry 是一个内存中的数据结构,存储了所有模型(Model)的元信息 字段 方法以及业务逻辑.
初始化过程如下:
-
对于每个数据库下,都有一个独立的 Registry
-
系统按依赖顺序 加载所有需要加载的模块
-
对于每个模块, Odoo都会:
-
导入模型文件: 执行模块中的
models/__init__.py
和*.py
文件,将其中定义的模型类加载到内存 -
构建模型: 对于每个模型, 收集其字段定义 方法 约束 继承等信息
-
应用继承: 根据继承机制( _inherit, _inherits )合并和修改模型定义
-
详细解析
流程如下:
扫描 addons_path 目录下的所有模块
包括官方模块、自定义模块、企业版等
读取每个模块的 manifest.py 文件
获取模块名、依赖关系、数据文件列表
构建模块图(Graph of Modules)
按依赖排序(例如 sale 依赖 account,所以 account 先加载)
依次加载模块:
- 创建模型(ORM 映射)
- 执行 pre_init_hook
- 创建数据库表(如果不存在)
- 导入数据文件(XML/CSV)按顺序:
- security/ir.model.access.csv
- data/*.xml
- demo/*.xml(仅当启用演示数据)
- 执行 post_init_hook
- 标记模块为 installed 状态
-
-
-
最终 , 一个完整的 包含所有模型及其关系的注册表被构建完成, 并缓存起来以供所有工作进程使用
11.触发模块安装/更新钩子:
- 对于新安装的模块,会执行
@api.model_create_multi
等装饰器标记的初始化方法,以及_init
方法(如果模型定义了它)。 - 对于更新的模块,会运行在
__manifest__.py
中定义的pre_init_hook
,post_init_hook
,uninstall_hook
等。
第五阶段: 启动服务 Workers
12.选择服务器模式:
-
启动 Cron Jobs
-
启动 RPC 和 Web 服务:
第六阶段 :准备就绪
-
服务器准备就绪