java - 执行 Java 的 Oracle 作业

标签 java oracle jdbc scheduled-tasks

是否可以从 Oracle (10g) 数据库中运行 java jar 文件?更具体地说,我希望使用安排 Oracle 作业

dbms_scheduler.create_job(...)

运行时,该作业将调用一个 Java 应用程序,该应用程序执行一个过程,涉及通过 HTTP 与另一个应用程序进行通信、一些业务逻辑,然后使用 JDBC 对数据库执行存储过程。

通常,执行此操作的 chron 作业可以正常工作,但 java 应用程序需要作为给定架构所有者与数据库进行通信。出于各种隐私原因,我无法将用户凭据以纯文本形式存储在应用程序配置中。

简而言之,我想知道是否有一种方法可以安排作业来执行 jar,并传入安排该作业的用户的凭据。

我对调度 Oracle 作业和从 Oracle 数据库运行 Java 代码都不熟悉,因此任何正确方向的指针都会很棒。我还没有真正找到任何像样的文档来说明我正在尝试做的事情,尽管我确信它必须存在。

编辑:找到了一些文档,看起来我可以做类似的事情

DBMS_SCHEDULER.create_program (
    program_name        => 'recurring_java_task',
    program_type        => 'EXECUTABLE',
    program_action      => 'java -jar /path/to/recurring-task.jar',
    number_of_arguments => 2,
    enabled             => TRUE,
    comments            => 'Program to perform cleanup');

然后使用 dbms_scheduler.create_job(...)

为“recurring_java_task”创建作业。似乎参数是使用

设置的
DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE (
   job_name                IN VARCHAR2,
   argument_position       IN PLS_INTEGER,
   argument_value          IN VARCHAR2);

但这仍然不能解决向 java 应用程序提供连接凭据(用户名/密码)的问题。

最佳答案

您可以将 Java 放入数据库中。 Oracle 10.2 Java Dev Guide 。这使用了一个特殊的 JDBC 连接字符串,该字符串实际上引用了内部 session 。有一些特殊的考虑,即没有 GUI 渲染等。您也可以在 pl/sql 中调用并包装它。

关于java - 执行 Java 的 Oracle 作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4000205/

相关文章:

Java 游戏 - 按下鼠标并拖动鼠标

java - 如何在 Intellij IDEA 2018.2 中将 GWT 2.8.1 调试为 java 代码而不是 java 脚本

java - MySQL 表数据归档

oracle - 如何将一个模式表中的数据插入到另一个模式表中?

mysql - 仅用 1 个请求替代 2 个 SQL/ORACLE 请求

mysql - 从列范围内的表中获取结果集?

java - 通过 JDBC 进行 DB2 AS/400 查询?

java - 为什么 ArrayIndexOutOfBoundsException 不是编译时错误?

oracle - 选择具有特定值的行之后的所有行而不重复相同的子查询

java - 方法终止时是否需要关闭连接和语句?