如何从自定义Rundeck插件中使用Rundeck数据库
自定义Rundeck插件读写自带数据库的方案
可以通过Rundeck提供的SDK访问其自带的数据库,但不建议直接读写核心数据库表——Rundeck内部表结构会随版本迭代变更,直接操作会让插件与特定版本强耦合,甚至破坏系统稳定性。
推荐的持久化方案
优先使用官方为插件设计的Plugin Data Storage API,这是安全且兼容的标准方式,无需直接接触数据库,SDK会自动处理底层存储适配:
- 存储插件专属数据时,API会将数据存入Rundeck数据库的插件专用表,避免干扰核心业务表
- 跨Rundeck版本时无需担心表结构变化,API会做兼容处理
示例Java SDK代码:
import com.dtolabs.rundeck.core.plugins.PluginDataContext; import com.dtolabs.rundeck.core.plugins.PluginDataStorage; // 从插件上下文获取数据存储实例 PluginDataStorage storage = pluginContext.getPluginDataStorage(); // 存储数据:指定键、字节数据、内容类型 storage.store("my-plugin-config", "{\"enabled\":true}".getBytes(), "application/json"); // 读取数据 byte[] dataBytes = storage.load("my-plugin-config"); String configJson = new String(dataBytes);
若需直接访问自带数据库(不推荐)
如果业务场景必须直接操作数据库,可通过Rundeck核心上下文获取内置DataSource或JdbcTemplate,但需严格遵守以下规则:
- 仅操作插件专属的自定义表,绝对禁止修改Rundeck核心表(如
execution、job等) - 自行处理数据库连接的创建与释放,避免资源泄漏
- 做好版本兼容测试,不同Rundeck版本的数据库结构可能存在差异
示例Java SDK代码:
import org.springframework.jdbc.core.JdbcTemplate; import com.dtolabs.rundeck.core.framework.Framework; // 从Framework实例获取JdbcTemplate JdbcTemplate jdbcTemplate = framework.getJdbcTemplate(); // 执行查询操作(仅示例自定义表) String pluginValue = jdbcTemplate.queryForObject( "SELECT config_value FROM my_plugin_table WHERE plugin_id = ?", String.class, "my-custom-plugin" );
关键提醒
直接操作Rundeck自带数据库属于非官方用法,没有版本兼容性保障,一旦Rundeck升级导致表结构变更,插件很可能失效。因此,除非有特殊业务需求,否则始终优先使用Plugin Data Storage API。
内容的提问来源于stack exchange,提问作者Shatazone
相关产品推荐
相关产品推荐

