首页 > 解决方案 > 您如何配置特定于 Camunda 进程的数据源?

问题描述

我在 Tomcat 9.0.12 上运行 Camunda 7.10。

流程引擎数据源配置在

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

并且,必要时,所有已部署的 Web 应用程序都可以使用。

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

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

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

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

看部署的具体流程,有两个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

解决方案


以下配置适用于在 Tomcat 9.0.12 上运行的 Camunda 7.10,根据 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 web-app,此字段不是必需的,因为范围仅限于该 web-app。对于 Camunda,任务侦听器等在 Camunda 主网络应用程序的范围内运行。

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

然后,在 CamundaJavaDelegateTaskListener中,可以使用以下形式的 URL 以DataSource通常的方式通过 an 获取连接:InitialContext

java:/comp/env/jdbc/myDatasource

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


推荐阅读