我正在使用JNDI方法将几个MySQL数据库服务器与我的Pentaho PDI(CE 5.0.1)连接起来并且到目前为止工作正常,请将其删除。其中一个MySQL服务器出现故障,所以我更改了我的JNDI连接(... \ data-integration \ simple-jndi \ jdbc.properties)以连接到新服务器,但是Kettle没有认识到这个更改并且抛出错误如下:
连接到数据库[db-name]时出错:org.pentaho.di.core.exception.KettleDatabaseException: 尝试连接到数据库时出错 无效的JNDI连接kidr_db_5:无法创建与数据库服务器的连接。尝试重新连接3次。放弃。 org.pentaho.di.core.exception.KettleDatabaseException: 尝试连接到数据库时出错 无效的JNDI连接kidr_db_5:无法创建与数据库服务器的连接。尝试重新连接3次。放弃。
我可以通过Native(JDBC)连接方法直接从Kettle连接到新服务器,但不能仅通过JNDI连接到这个新服务器。从JNDI休息DB连接工作正常。请指导我这里错了什么?我错过了什么?还是一个bug?
答案 0 :(得分:1)
我已经解决了这个问题,很抱歉最近回复。问题是,密码包括几个特殊字符,包括#符号;但是在Pentaho,#是一条评论专栏,所以密码的一部分似乎是对Pentaho的评论。
所以结论是,除了JNDI配置或Kettle配置文件中的注释之外,不要使用#。
答案 1 :(得分:0)
快速信息 不完全是一个Kettle Pentaho bug。 Bug(如果不是故意制作的)是" simple-jndi"图书馆。 Kettle使用库simple-jndi来提供jndi上下文。虽然 java.util.Properties 类(http://docs.oracle.com/javase/7/docs/api/java/util/Properties.html)的oracle文档声明,注释行必须由'#'符号,它必须是行中的第一个符号,库" simple-jndi" - 使用自己的加载器,名为 org.osjava.sj.loader.util.CustomLoader 。这就是bug所在的地方
int idx = line.indexOf('#');
// remove comment
if(idx != -1) {
line = line.substring(0,idx);
}
所以评论就是'#'如果你使用simple-jndi,行中的符号。
答案 2 :(得分:0)
使用.xml而不是.properties
<?xml version="1.0" encoding="UTF-8"?>
<something>
<connection-name>
<type>javax.sql.DataSource</type>
<driver>org.postgresql.Driver</driver>
<url>jdbc:postgresql://localhost:5432/database</url>
<user>user</user>
<password>#secret#</password>
</connection-name>
</something>
我的文件叫做connections.xml 然后你可以参考connections / something / connection-name 在上面例子的pdi中