您如何配置 Camunda 流程特定的数据源?

How do you configure a Camunda process specific datasource?

我在 Tomcat 9.0.12 上安装了 Camunda 7.10 运行。

流程引擎数据源配置在

/[tomcat-home]/conf/server.xml

并且必要时可用于所有已部署的网络应用程序。

我希望配置仅供该进程使用的特定于进程的数据源。

对于普通的网络应用程序,通常有一个

[tomcat-home]/webapps/[web-app-name]/META-INF/context.xml

定义数据源和定位器代码的配置文件 returns javax.sql.DataSource 使用 javax.naming.InitialContext

查看具体进程的部署,有两个META-INF文件夹

[tomcat-home]\webapps\[process-name]\META-INF
[tomcat-home]\webapps\[process-name]\WEB-INF\classes\META-INF

第一个有 maven 特定项目。 第二个是 process.xml 文件所在的位置。

使用经过验证的数据源定位器代码并在此处放置经过验证的 context.xml 文件失败并显示

javax.naming.NameNotFoundException: Name [jdbc/recruitDS] is not bound in this Context. Unable to find [jdbc].

搜索此内容只会导致有关主要 Camunda 流程引擎数据源配置的信息,这些信息在手册、论坛等中都有很好的介绍。

以下配置适用于 Camunda 7.10 运行ning on Tomcat 9.0.12 根据 Camunda Java Process Get-Started 示例使用 Maven 构建项目访问 SQL Server 2012 .

在展开的WAR文件中,文件夹中:

[tomcat-home]\webapps\[process-name]\META-INF

必须有一个包含这些字段的 context.xml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<Context>
  <Resource
    name="jdbc/myDatasource"
    global="jdbc/myDatasource"
    auth="Container"
    type="javax.sql.DataSource"
    driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
    url="jdbc:sqlserver://127.0.0.1:1433;databaseName=myDatabaseName"
    username="myUsername"
    password="myPassword"
    maxTotal="50"
    maxIdle="0"
    maxWaitMillis="-1"
    removeAbandonedOnBorrow="true"
    removeAbandonedOnMaintenance="true" />
</Context>

重要的字段是 global 标记 - 缺少它会导致上述异常。对于普通的 JSP/servlet 网络应用程序,此字段不是必需的,因为范围仅限于该网络应用程序。对于 Camunda,主要 Camunda 网络应用程序范围内的任务侦听器等 运行。

使用Maven构建,只需将META-INF文件夹&文件添加到项目文件结构即可。

然后,在 Camunda JavaDelegateTaskListener 中,可以使用 DataSource 通过 InitialContext 以通常的方式获得连接URL 的形式:

java:/comp/env/jdbc/myDatasource

使用特定于流程的数据源可避免使用特定于流程的项目污染主 tomcat server.xml 配置文件。