与Apache Cassandra的SoapUI JDBC连接
有没有人知道如何使用SoapUI中的JDBC连接字符串连接到cassandra。
我试过了,但无法连接。 根据研究我才知道org.apache.cassandra.cql.jdbc.CassandraDriver
不支持。
我正在使用以下信息。
- 驱动程序:
org.apache.cassandra.cql.jdbc.CassandraDriver
- 连接字符串:
jdbc:cassandra://localhost:8080/test3
这些天Thrift在Cassandra接口方面已经死了,你需要使用本机CQL协议来做任何有用的事情。 幸运的是,如果这是您唯一的集成选项,则可以使用JDBC包装器 ,并且本机驱动程序的概念将比旧的Thrift协议更好地映射到JDBC。
JDBC驱动程序类:com.github.adejanovski.cassandra.jdbc.CassandraDriver
JDBC URL:jdbc:cassandra:// host1 – host2 – host3:9042 / keyspace
其中9042是默认的本机传输端口,可通过cassandra.yaml进行配置。
似乎还有用于Cassandra 3.x的基于Thrift的JDBC驱动程序的更新版本 ,但Apache或Cassandra开发人员不再支持它。
由于这里的其他答案一直在共享(有时是虚假的)依赖关系的固定列表,我认为我最好提一下正确的依赖关系管理,因为如果不同的jar版本都不匹配,很多事情都行不通(特别是,2.x到3.x是Cassandra本身和cassandra-driver-core的重大变化。
上面提到的包装器项目包含一个pom.xml,它指定所有依赖项并发布到Maven Central 。 您应该能够使用任意数量的依赖管理工具(包括maven,ivy或grape)来解析和下载特定驱动程序版本所需的所有jar。
或者,开发人员似乎提供了一个包含所有必需依赖项的jar,但这将与特定的驱动程序版本相关联。
这很有趣,我从来没有和Cassandra合作过,所以我花了一些时间才想出这个,我想我有。
要使用Cassandra,您需要多个jar文件,下面是我使用的文件的屏幕截图。
我使用cassandra-cli找出正确的端口号,在我的例子中它是9160
。
正确的连接字符串是jdbc:cassandra://localhost:9160/soapuikeyspace
,正确的驱动程序是org.apache.cassandra.cql.jdbc.CassandraDriver
。 当我试图从JDBC步骤访问Cassandra时我能够成功连接到Cassandra但是当我尝试运行一个选择查询时我得到了
获得回复时出错
和soapUI日志中的以下错误跟踪
Sat Apr 05 17:33:09 ADT 2014:ERROR:java.sql.SQLFeatureNotSupportedException java.sql.SQLFeatureNotSupportedException at org.apache.cassandra.cql.jdbc.CassandraResultSet$CResultSetMetaData.getTableName(CassandraResultSet.java:1307) at com.eviware.soapui.support.xml.XmlUtils.addResultSetXmlPart(XmlUtils.java:1712) at com.eviware.soapui.support.xml.XmlUtils.createJdbcXmlResult(XmlUtils.java:1651) at com.eviware.soapui.impl.wsdl.panels.teststeps.JdbcResponse.(JdbcResponse.java:38) at com.eviware.soapui.impl.wsdl.panels.teststeps.JdbcSubmit.createResponse(JdbcSubmit.java:334) at com.eviware.soapui.impl.wsdl.panels.teststeps.JdbcSubmit.runQuery(JdbcSubmit.java:199) at com.eviware.soapui.impl.wsdl.panels.teststeps.JdbcSubmit.run(JdbcSubmit.java:161) at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) at java.util.concurrent.FutureTask.run(Unknown Source) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) at java.lang.Thread.run(Unknown Source)
所以这种做法是一个破产。
这不是彻底的失败,因为我能够访问Cassandra并对其运行查询。 我使用下面的代码来做到这一点。
import java.sql.DriverManager; import java.sql.SQLFeatureNotSupportedException; import java.sql.Statement; import javax.sql.DataSource; import org.apache.cassandra.cql.jdbc.*; com.eviware.soapui.support.GroovyUtils.registerJdbcDriver("org.apache.cassandra.cql.jdbc.CassandraDriver"); def con = DriverManager.getConnection("jdbc:cassandra://localhost:9160/soapuikeyspace"); //keyspace has to be in lowercase def stmt = con.createStatement(); //add data def qry = "insert into users (user_id, lname, fname) values (1747,'Abhishek','Asthana');" def rs = stmt.executeUpdate(qry)
使用此代码时要记住的最重要的事情是将键空间名称写为小写。
对于任何有兴趣的人,我写了一篇关于这一切的博客 。
我能够通过创建Cassandra集群并使用它来连接到cassandra,如下所示:
import com.datastax.driver.core.Cluster; import com.datastax.driver.core.Session; def rs; //query def qry = "select id soapuikeyspace.users where id='aaa';" //create cluster for cassandra Cluster cluster = new Cluster.Builder().addContactPoint("localhost").withCredentials("cassandra", "cassandra").withPort(9042).build(); //get seesionm from cassandra claster session = cluster.connect(); //get result set rs = session.execute(qry);
必需的jar子:
- 卡桑德拉 – 全2.0.6.jar
- 卡桑德拉驱动核心 – 2.0.1.jar
- 网状-3.9.0.Final.jar
- 度量芯-3.0.2.jar
我通过cql连接成功连接到Cassandra 3.x和SoapUI版本5.3.0。
这是我的步骤:
-
将这些jar子复制到bin / ext:
DSE-java的驱动核心 – 1.4.0
DSE-Java的应用程序映射-1.4.0
度量芯-3.0.2
netty-all-4.1.6.Final
-
从lib更新guava jar:
番石榴18.0
-
启动soapui并创建groovy脚本:
import com.datastax.driver.core.*; Cluster cluster = null; cluster = new Cluster.Builder().addContactPoints("127.0.0.1").withPort(9042).build(); Session session = cluster.connect(); PreparedStatement statement = session.prepare("select * from keyspace.exemple_table"); ResultSet rs = session.execute(statement.bind()); Row row = rs.one();
- 使用Datastax API(使用新的二进制协议)升级/读入/读取Cassandra数据库
- Cassandra没有启动带有JDK到8u161的AbstractMethodError的原因?
- 使用CQL jdbc驱动程序时应该是什么连接字符串
- 写入cassandra datastax驱动程序引发的超时
- Cassandra的IN关系对查询有害吗?
- 无法启动DSE搜索的solr方面
- Cassandra NoHostAvailableException Java-CQLDriver
- Cassandra使用TokenAwarePolicy和shuffleReplicas进行负载均衡
- 只有日期范围扫描Cassandra CQL时间戳