将persist和后端分离,方便替换为其他数据库
This commit is contained in:
@@ -28,6 +28,8 @@ remote_datasource:
|
||||
jsonl_dir: ${PROJECT_ROOT}/remote_datasource/datasource
|
||||
persist:
|
||||
db_path: ${PROJECT_ROOT}/test_results/sync_state_machine/demo.db
|
||||
backend: sqlite
|
||||
backend_options: {}
|
||||
strategies:
|
||||
project:
|
||||
config:
|
||||
@@ -109,6 +111,45 @@ logging:
|
||||
- 每个业务类型的行为策略(依赖、自动绑定、创建方向、更新方向、跳过等)。
|
||||
- `persist`
|
||||
- 持久化开关与数据库位置。
|
||||
- `persist.backend`
|
||||
- 持久化后端注册表里的名称,例如 `sqlite`。
|
||||
- backend 实现会自行解释 `persist` 的其余字段。
|
||||
- `persist.backend_options`
|
||||
- 后端私有配置,后端自己决定如何解释。
|
||||
|
||||
### 6. 持久化后端注册
|
||||
|
||||
如果你希望在 backend 初始化阶段替换持久化后端,可以先在启动代码里按名称注册,再通过配置选择,不需要改调用方。
|
||||
|
||||
#### 6.1 内置 SQLite
|
||||
|
||||
```yaml
|
||||
persist:
|
||||
backend: sqlite
|
||||
db_path: ${PROJECT_ROOT}/test_results/sync_state_machine/demo.db
|
||||
backend_options: {}
|
||||
```
|
||||
|
||||
#### 6.2 注册自定义后端
|
||||
|
||||
```python
|
||||
from sync_state_machine.common.persistence import register_persistence_backend
|
||||
|
||||
register_persistence_backend("mysql", lambda config: MySQLPersistenceBackend(config))
|
||||
```
|
||||
|
||||
然后在配置里选择这个名字:
|
||||
|
||||
```yaml
|
||||
persist:
|
||||
backend: mysql
|
||||
db_path: ${PROJECT_ROOT}/test_results/sync_state_machine/demo.db
|
||||
backend_options:
|
||||
url: mysql+aiomysql://user:pass@127.0.0.1/depm_sync?charset=utf8mb4
|
||||
pool_size: 5
|
||||
```
|
||||
|
||||
后端实现会收到整份 `PersistConfig`,自行决定是读取 `db_path`、`backend_options`,还是额外扩展别的字段。
|
||||
- `logging`
|
||||
- 运行日志输出位置与级别。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user