编写可执行的jar

这里写了一个批量删除zookeeper节点的工具jar,关于如何生成可执行jar请参照我的另外一篇博客:Maven生成可以直接运行的jar包的多种方式

主要是在main函数中对传入的参数进行处理:

package com.zk;

import com.zk.util.ZookeeperCuratorUtils;
import org.apache.curator.framework.CuratorFramework;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.util.CollectionUtils;

import java.util.List;


/**
 * 程序主入口
 * Created by sunnyLu on 2017/5/27.
 */
public class Main {
    public static void main(String[] args) {

        try {
            ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath*:/*.xml");
            String connectString = args[0];//zk链接地址
            String type = args[1];//操作类型
            String rmrNode = args[2];//用于模糊匹配的节点内容
            CuratorFramework client = ZookeeperCuratorUtils.clientOne(connectString);
            if ("brmr".equals(type)){//批量删除
                List<String> childNodeList = ZookeeperCuratorUtils.nodesList(client,"/dubbo");
                if (CollectionUtils.isEmpty(childNodeList))
                    print("没有子节点");
                for (String node : childNodeList){
                    if (node.contains(rmrNode)){
                        ZookeeperCuratorUtils.deleteDataNode(client,"/dubbo"+"/"+node);
                        print(node);
                    }
                }
                print("移除完毕");
            }
        } catch (Exception e) {
            e.printStackTrace();
            printHelp();
        }
    }


    private static void printHelp() {
        print("===============================");
        print("应用配置导入程序");
        print("Author:sunnyLu");
        print("Email:******@qq.com");
        print("Tel:187****0464");
        print("参数有异常,请详见REDEME.txt");
        print("祝使用愉快!!");
    }

    private static void print(String str) {
        System.out.println(str);
    }
}
package com.zk.util;

import java.util.ArrayList;
import java.util.List;

import org.apache.curator.RetryPolicy;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.framework.CuratorFrameworkFactory;
import org.apache.curator.framework.api.ACLProvider;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.apache.curator.retry.RetryNTimes;
import org.apache.zookeeper.ZooDefs;
import org.apache.zookeeper.ZooDefs.Perms;
import org.apache.zookeeper.data.ACL;
import org.apache.zookeeper.data.Id;
import org.apache.zookeeper.data.Stat;

/**
 * zk工具类
 * Created by sunnyLu on 2017/7/12.
 */
public class ZookeeperCuratorUtils {


    public static CuratorFramework clientOne(String connectString){
        // 连接时间 和重试次数
        RetryPolicy retryPolicy = new ExponentialBackoffRetry(1000, 3);
        //CuratorFramework client = CuratorFrameworkFactory.newClient(connectString, retryPolicy);
        CuratorFramework client = CuratorFrameworkFactory.builder().connectString(connectString)
                .sessionTimeoutMs(5000).retryPolicy(retryPolicy).build();
        client.start();
        return client;
    }


    public static CuratorFramework clientTwo(String connectString){

        //默认创建的根节点是没有做权限控制的--需要自己手动加权限???----
        ACLProvider aclProvider = new ACLProvider() {
            private List<ACL> acl ;
            @Override
            public List<ACL> getDefaultAcl() {
                if(acl ==null){
                    ArrayList<ACL> acl = ZooDefs.Ids.CREATOR_ALL_ACL;
                    acl.clear();
                    acl.add(new ACL(Perms.ALL, new Id("auth", "admin:admin") ));
                    this.acl = acl;
                }
                return acl;
            }
            @Override
            public List<ACL> getAclForPath(String path) {
                return acl;
            }
        };
        String scheme = "digest";
        byte[] auth = "admin:admin".getBytes();
        int connectionTimeoutMs = 5000;
        String namespace = "testnamespace";
        CuratorFramework client = CuratorFrameworkFactory.builder().aclProvider(aclProvider).
                authorization(scheme, auth).
                connectionTimeoutMs(connectionTimeoutMs).
                connectString(connectString).
                namespace(namespace).
                retryPolicy(new RetryNTimes(Integer.MAX_VALUE, 1000)).build();
        client.start();
        return client;
    }

    
    public static List<String> nodesList(CuratorFramework client,String parentPath) throws Exception{
        List<String> paths = client.getChildren().forPath(parentPath);
        return paths;
    }

    public static void deleteDataNode(CuratorFramework client,String path) throws Exception{
        Stat stat = client.checkExists().forPath(path);
        if (stat == null)
            return;
        client.delete().deletingChildrenIfNeeded().forPath(path);
    }

}
使用mvn clean package打包会在项目目录的target目录生成jar包及其所以依赖的jar

运行这个jar文件


查看zk节点信息会发现这个时候相关的zk节点已经删除

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值