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)组件:
- 执行
bundle:install mvn:mysql/mysql-connector-java/8.0.27安装MySQL JDBC驱动 - 执行
feature:install tesb-datasource-mysql安装MySQL数据源组件 - 执行
tesb:start-sam启动SAM服务 - 编辑
org.talend.esb.sam.server.cfg配置文件,写入参数:db.datasource=ds-mysql db.dialect=mysqlDialect - 编辑
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,依次执行两条命令:
启动级别设为50是为了保证驱动在数据源、SAM组件之前完成初始化,避免启动顺序导致的加载失败。bundle:start <查询到的驱动bundle ID> bundle:level <查询到的驱动bundle ID> 50 - 补全数据源配置的驱动类参数
你使用的是MySQL 8.0.x版本驱动,现有数据源配置缺少驱动类声明,在org.talend.esb.datasource.mysql.cfg中追加一行:
注意MySQL 5.1.x版本驱动对应的类是datasource.driverClassName=com.mysql.cj.jdbc.Drivercom.mysql.jdbc.Driver,8.0版本必须使用cj包下的驱动类,否则会报类找不到错误。 - 修正JDBC连接URL
MySQL 8.0版本的JDBC连接默认要求SSL、时区配置,缺少参数会导致连接失败、数据源无法注册,将原有datasource.url配置替换为:
替换后先在Karaf宿主机上执行mysql命令行直连测试,确认网络、账号权限都正常,避免因为网络隔离、账号远程访问权限没开导致连接失败。datasource.url=jdbc:mysql://localhost:3306/mydb?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true - 调整组件启动顺序
之前的操作顺序有误:不要在写完配置前执行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
相关产品推荐
相关产品推荐

