zookeeper切换数据库连接

pom.xml添加:
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>

<!--导入本地ojdbc6.jar-->
<dependency>
<groupId>oracle</groupId>
<artifactId>oracle</artifactId>
<version>11g</version>
<scope>system</scope>
<systemPath>ojdbc6.jar所在位置</systemPath>
</dependency>


</dependencies>

一.使用zkclient创建znode节点,对节点数据的修改只能通过zkclient

public class ConnectDb {

    private static String url = null;
    private static String driverClass = null;
    private static String username = null;
    private static String password = null;

    public static Connection getConnection(String url, String driverClass, String username, String password)
            throws Exception {

        Class.forName(driverClass);

        Connection connection = DriverManager.getConnection(url, username, password);


        return connection;
    }


    public static void main(String[] args) throws Exception {


        String zkServers = "localhost:2181"; // ip:端口,多台机器之间用逗号(,)隔开


        final ZkClient zkClient = new ZkClient(zkServers, 10000, 5000);


        if (!zkClient.exists("/db")) {


            zkClient.createPersistent("/db");
            zkClient.createPersistent("/db/url", "jdbc:mysql://192.168.14.66:3306/work");
            zkClient.createPersistent("/db/driverClass", "com.mysql.jdbc.Driver");
            zkClient.createPersistent("/db/username", "root");
            zkClient.createPersistent("/db/password", "123456");
        }


        url = zkClient.readData("/db/url");
        driverClass = zkClient.readData("/db/driverClass");
        username = zkClient.readData("/db/username");
        password = zkClient.readData("/db/password");

        Connection connection = getConnection(url, driverClass, username, password);

        System.out.println(connection);

        // 监控/db节点
        zkClient.subscribeDataChanges("/db/url", new IZkDataListener() {
            // 当/user/zs节点被删除时触发
            public void handleDataDeleted(String arg0) throws Exception {

            }

            // 当/db/url节点被修改时触发
            public void handleDataChange(String arg0, Object arg1) throws Exception {
                url = zkClient.readData("/db/url");
                driverClass = zkClient.readData("/db/driverClass");
                username = zkClient.readData("/db/username");
                password = zkClient.readData("/db/password");

                Connection connection = getConnection(url, driverClass, username, password);
                System.out.println(connection);
            }
        });


        // 与server保持连接
        while (true) {
            TimeUnit.SECONDS.sleep(5);
        }
    }


}

public class ZkModify {

    public static void main(String[] args) {

        String   zkServers="localhost:2181";       
        ZkClient zkClient=new ZkClient(zkServers, 10000, 5000);

zkClient.writeData("/db/driverClass", "oracle.jdbc.OracleDriver");
        zkClient.writeData("/db/username", "food");
        zkClient.writeData("/db/password", "123456");
        zkClient.writeData("/db/url", "jdbc:oracle:thin:@localhost:1521:ORCL");
    }
}

二.使用zookeeper客户端或在eclipse上安装zookeeper插件添加znode节点
对节点数据的修改只能通过使用zookeeper客户端或在eclipse上安装的zookeeper插件


public class DbConnection {


    public static Connection getConnection(String url, String driverClass, String username, String password)
            throws Exception {


        Class.forName(driverClass);


        Connection connection = DriverManager.getConnection(url, username, password);


        return connection;
    }


    public static void main(String[] args) throws Exception {


        String zkServers = "localhost:2181"; // ip:端口,多台机器之间用逗号(,)隔开


      final ZkClient  zkClient = new ZkClient(zkServers, 10000, 5000,new BytesPushThroughSerializer());


       
        byte[] url = zkClient.readData("/db/url");
        byte[] driverClass = zkClient.readData("/db/driverClass");
        byte[] username = zkClient.readData("/db/username");
        byte[] password = zkClient.readData("/db/password");

       Connection connection = getConnection(new String(url),new String(driverClass),new String(username),new String(password));

       System.out.println(connection);
       
        // 监控/db节点
        zkClient.subscribeDataChanges("/db/url", new IZkDataListener() {
            // 当/user/zs节点被删除时触发
            public void handleDataDeleted(String arg0) throws Exception {

            }

            // 当/db/url节点被修改时触发
            public void handleDataChange(String arg0, Object arg1) throws Exception {

                byte[] url = zkClient.readData("/db/url");
                byte[] driverClass = zkClient.readData("/db/driverClass");
                byte[] username = zkClient.readData("/db/username");
                byte[] password = zkClient.readData("/db/password");
                Connection connection = getConnection(new String(url),new String(driverClass),new String(username),new String(password));
                System.out.println(connection);
            }
        });

        // 与server保持连接
        while (true) {
            TimeUnit.SECONDS.sleep(5);
        }
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值