前面介绍了通过scylladb提供的driver,编写java代码,然后操作scylladb数据库。但是因为scylladb默认采用的监听地址是localhost即127.0.0.1,如果想从外部连接scylladb是不行的,所以代码编写完成,需要打包,然后部署到scylladb服务器运行。
这里解决这个问题,让外部程序可以通过ip也能访问scylladb。scylladb安装成功之后,在/etc/scylla目录下会生成一个scylla.yaml的配置文件,我们可以看看这个配置文件。
scylla.yaml配置文件中有这么一段:
本来一般的address,如果没有特别的说明,直接设置为0.0.0.0就表示容许外部访问,而且能够监听本机。但是根据这个提示,好像不能直接设置为0.0.0.0,根据本人的测试,设置0.0.0.0可以启动scylladb,scylladb的进程都在,但是监听端口9042一直起不来,还真的就是这里所说的那样,设置为0.0.0.0就会出错。
后来将配置文件中所有的localhost或者127.0.0.1统统改为本机对外IP-10.119.9.149,这样再次启动scylladb,不久之后,9042端口也开启了。
到了这里,scylladb监听地址已经修改完毕,并且已经看到了9042端口开启。
这里利用之前的一段程序测试远程连接scylladb,并查询数据:
package com.xxx.scylladbdemo;
import com.datastax.driver.core.Cluster;
import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Row;
import com.datastax.driver.core.Session;
public class App {
public static String[] contact_points = {"10.119.9.149"};
public static int port = 9042;
private static Cluster cluster;
private static Session session;
public static void connect(){
cluster = Cluster.builder().addContactPoints(contact_points).withPort(port).build();
System.out.printf("connected to cluster : %s%n", cluster.getMetadata().getClusterName());
session = cluster.connect();
}
public static void query(){
ResultSet rs = session.execute("select * from domestic.student");
System.out.printf("%-30s\t%-20s\t%-20s%n", "ID","Name","Age");
for(Row row:rs){
System.out.printf("%-30d\t%-20s\t%-20d%n", row.getInt("id"),row.getString("name"),row.getInt("age"));
}
}
public static void close(){
session.close();
cluster.close();
System.out.println("close.");
}
public static void main( String[] args ){
connect();
query();
close();
}
}
运行结果如下:
这个打印结果说明通过java程序能够通过IP远程连接scylladb数据库,并查询到了数据。