You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache Karaf使用SAM服务时提示ds-mysql数据源不可用问题

Talend Runtime(Apache Karaf)SAM服务报Datasource 'ds-mysql' is not available修复方案

问题现象

部署操作流程:

  • 基于Talend Runtime内置的Apache Karaf容器部署SOAP Web服务,按以下步骤安装Service Activity Monitoring(SAM)组件:
    1. 执行bundle:install mvn:mysql/mysql-connector-java/8.0.27安装MySQL JDBC驱动
    2. 执行feature:install tesb-datasource-mysql安装MySQL数据源组件
    3. 执行tesb:start-sam启动SAM服务
    4. 编辑org.talend.esb.sam.server.cfg配置文件,写入参数:
      db.datasource=ds-mysql
      db.dialect=mysqlDialect
      
    5. 编辑org.talend.esb.datasource.mysql.cfg配置文件,写入参数:
      datasource.url=jdbc:mysql://localhost:3306/mydb
      datasource.username=myusername
      datasource.password=mypassword
      datasource.pool.maxActive=20
      datasource.pool.maxIdle=5
      datasource.pool.maxWait=30000
      
  • 重启Karaf容器后调用Web服务,日志抛出异常:
    org.springframework.dao.DataAccessResourceFailureException: Could not obtain 2344985; nested exception is java.sql.SQLException: Datasource 'ds-mysql' is not available
    
  • 已知状态:SOAP Web服务本身运行正常,数据库可通过客户端正常访问,SAM服务始终无法正常工作。

遗漏操作与修复步骤

按以下顺序逐一排查修复即可解决问题:

  • 启动MySQL驱动bundle并调整启动级别
    bundle:install命令仅会将bundle安装到容器,默认不会自动启动,数据源组件加载不到JDBC驱动类会直接导致注册失败。先执行bundle:list | grep mysql-connector-java查询到驱动对应的bundle ID,依次执行两条命令:
    bundle:start <查询到的驱动bundle ID>
    bundle:level <查询到的驱动bundle ID> 50
    
    启动级别设为50是为了保证驱动在数据源、SAM组件之前完成初始化,避免启动顺序导致的加载失败。
  • 补全数据源配置的驱动类参数
    你使用的是MySQL 8.0.x版本驱动,现有数据源配置缺少驱动类声明,在org.talend.esb.datasource.mysql.cfg中追加一行:
    datasource.driverClassName=com.mysql.cj.jdbc.Driver
    
    注意MySQL 5.1.x版本驱动对应的类是com.mysql.jdbc.Driver,8.0版本必须使用cj包下的驱动类,否则会报类找不到错误。
  • 修正JDBC连接URL
    MySQL 8.0版本的JDBC连接默认要求SSL、时区配置,缺少参数会导致连接失败、数据源无法注册,将原有datasource.url配置替换为:
    datasource.url=jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
    
    替换后先在Karaf宿主机上执行mysql命令行直连测试,确认网络、账号权限都正常,避免因为网络隔离、账号远程访问权限没开导致连接失败。
  • 调整组件启动顺序
    之前的操作顺序有误:不要在写完配置前执行tesb:start-sam。SAM启动时会立即查找指定的数据源服务,如果此时数据源还没完成配置注册,就会直接抛找不到数据源的错误。正确顺序是:安装驱动→启动驱动→安装数据源feature→写完所有配置文件→最后执行tesb:start-sam启动SAM。
  • 校验数据源注册状态
    重启Karaf后先执行service:list | grep ds-mysql校验,如果输出结果中存在javax.sql.DataSource类型、服务属性包含osgi.jndi.service.name=ds-mysql的条目,说明数据源已经正常注册,此时SAM服务即可正常连接数据库采集服务监控数据。

版本兼容提示:如果使用的是Talend Runtime 7.3.1及更早版本,自带的tesb-datasource-mysqlfeature默认适配MySQL 5.1系列驱动,使用8.0驱动会出现类版本不兼容问题,要么将驱动替换为mysql-connector-java 5.1.49版本,要么升级Talend Runtime到7.4及以上版本。

内容的提问来源于stack exchange,提问作者BOB

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 20:42:16