add: Plugin 基类支持 [workers.config.database] 配置接入 PostgreSQL(url 优先,SQLite 回落)
This commit is contained in:
@@ -45,11 +45,11 @@ logger = logging.getLogger(__name__)
|
||||
|
||||
class MyPlugin(Plugin):
|
||||
type = "my_plugin"
|
||||
db_name = "my_plugin.db" # 自动在 data_dir 下建 SQLite 库;不需要则置 None
|
||||
db_name = "my_plugin.db" # SQLite:自动在 data_dir 下建库;config 含 database.url 时优先走 PostgreSQL;不需要则置 None
|
||||
auto_bind = True # 首次初始化时自动 auto_bind_models(self.type)
|
||||
|
||||
async def on_init(self):
|
||||
# 数据库已由基类自动初始化(self.db)
|
||||
# 数据库已由基类自动初始化(self.db,SQLite 或 PostgreSQL)
|
||||
self.set_var("db", self.db) # 写入插件 global_var 模块
|
||||
# self.spawn_task(self._background_loop()) # 后台任务(cleanup 自动取消)
|
||||
# self.register_cleanup(self._close_client) # 注册清理钩子(逆序执行)
|
||||
@@ -59,6 +59,15 @@ class MyPlugin(Plugin):
|
||||
...
|
||||
|
||||
|
||||
# PostgreSQL 接入(可选):在插件 config.toml 配置 database 段后,
|
||||
# 基类 init_database() 检测到 url 即走 Database.from_config 接入 PG::
|
||||
#
|
||||
# # config/workers/my_plugin/config.toml
|
||||
# [workers.config.database]
|
||||
# type = "postgresql"
|
||||
# url = "postgresql+asyncpg://user:pwd@127.0.0.1:5432/mydb"
|
||||
# generate_schemas = true
|
||||
|
||||
# 暴露给 app lifespan 的模块级入口(bound method,签名与旧写法一致)
|
||||
plugin = MyPlugin()
|
||||
create_workers = plugin.create_workers
|
||||
@@ -70,7 +79,7 @@ cleanup = plugin.cleanup
|
||||
| 属性 / 方法 | 说明 |
|
||||
| -------------- | ---------------------------------------------------------------------------- |
|
||||
| `type` | 插件类型(worker type),匹配 subject 前缀与 `config/workers/<type>`(必填) |
|
||||
| `db_name` | 默认 SQLite 文件名(放 `data_dir` 下);`None` 表示不自动建库 |
|
||||
| `db_name` | 默认 SQLite 文件名(放 `data_dir` 下);config 含 `database.url` 时优先走 PostgreSQL;`None` 表示不自动建库 |
|
||||
| `auto_bind` | 首次初始化时是否自动 `auto_bind_models(self.type)` |
|
||||
| `on_init()` | 首次 `create_workers` 时调用一次,初始化资源 |
|
||||
| `on_cleanup()` | `cleanup` 时调用,清理自定义资源 |
|
||||
@@ -79,7 +88,7 @@ cleanup = plugin.cleanup
|
||||
|
||||
- **幂等**:重复 `create_workers` 只初始化一次(`asyncio.Lock` 守卫,并发调用安全)
|
||||
- **统一日志**:`logger` 自动带 `[type]` 前缀
|
||||
- **数据库**:`init_database()` 统一建路径、建表、记录,`cleanup` 自动 `dispose()`
|
||||
- **数据库**:`init_database()` 统一建库建表、记录,`cleanup` 自动 `dispose()`(SQLite 按 `db_name`;config 含 `database.url` 时走 PostgreSQL)
|
||||
- **global_var**:`set_var()` / `get_var()` 统一读写插件 `global_var` 模块;`cleanup` 时自动将已发布的变量重置为 `None`,避免业务代码拿到已释放的资源
|
||||
- **后台任务**:`spawn_task()` 跟踪,`cleanup` 时自动取消并 `gather`
|
||||
- **清理钩子**:`register_cleanup()` 注册,`cleanup` 时逆序执行
|
||||
|
||||
Reference in New Issue
Block a user