分布式job

1、引入jar

<dependency>
            <groupId>com.dangdang</groupId>
            <artifactId>elastic-job-lite-core</artifactId>
            <version>2.1.5</version>
        </dependency>

2、任务逻辑

public class ArchivieJob implements SimpleJob {
    @Override
    public void execute(ShardingContext shardingContext) {
        //1、从原表中查询出1条记录(未归档)
        String selectSql = "select * from resume where state = '未归档' limit 1";
        List<Map<String, Object>> list = JDBCUtil.executeQuery(selectSql);
        if(list == null && list.size() == 0){
            System.out.println("数据已经处理完毕!!!");
            return;
        }
        //2、从未归档改为已归档
        Map<String,Object> stringObjectMap = list.get(0);
        long id = (long) stringObjectMap.get("id");
        String name = (String) stringObjectMap.get("name");
        String education = (String) stringObjectMap.get("education");

        System.out.println("==========>" + id + " name:" + name + " education:" + education);

        String updateSql = "update resume set state = '已归档' where id = ?";
        JDBCUtil.executeUpdate(updateSql,id);

        String insertSql = "insert into resume_bak select * from resume where id = ?";
        JDBCUtil.executeUpdate(insertSql,id);
    }
}
public class JDBCUtil {

    private static String driver = "com.mysql.jdbc.Driver";

    private static String url = "jdbc:mysql://101.132.167.18:3306/mydatabase";

    private static String username = "root";

    private static String password = "root";

    static {
        try {
            Class.forName(driver);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static List<Map<String,Object>> executeQuery(String sql, Object ...arg){
        Connection con = getConnection();
        ResultSet rs = null;
        PreparedStatement ps = null;
        try{
            ps = con.prepareStatement(sql);
            for (int i = 0; i < arg.length; i++) {
                ps.setObject(i+1,arg[i]);
            }
            rs = ps.executeQuery();
            //定义一个空集合存储数据
            List<Map<String,Object>> list = new ArrayList<>();
            //获取结果集的个数
            int count = rs.getMetaData().getColumnCount();
            //对结果集遍历每一条数据是一个Mapj集合,列是k,值是v
            while(rs.next()){
                //一个空的map集合,用来存放每条数据
                Map<String,Object> map = new HashMap<>();
                for (int i = 0; i < count; i++) {
                    Object obj = rs.getObject(i+1);
                    String key = rs.getMetaData().getColumnName(i+1);
                    map.put(key,obj);
                }
                list.add(map);
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            close(rs,ps,con);
        }
        return null;
    }

    public static void executeUpdate(String sql,Object ...arg){
        Connection con = getConnection();
        PreparedStatement ps = null;
        try {
            ps = con.prepareStatement(sql);
            for (int i = 0; i < arg.length; i++) {
                ps.setObject(i+1,arg[i]);
            }
            ps.executeUpdate();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            close(null,ps,con);
        }
    }

    public static Connection getConnection() {
        try {
            return DriverManager.getConnection(url, username, password);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }

    public static void close(ResultSet rs, PreparedStatement ps, Connection con){
        if(rs != null){
            try {
                rs.close();
            } catch (SQLException throwables) {
                throwables.printStackTrace();
            }finally {
                if(ps != null){
                    try {
                        ps.close();
                    } catch (SQLException throwables) {
                        throwables.printStackTrace();
                    }finally {
                        try {
                            con.close();
                        } catch (SQLException throwables) {
                            throwables.printStackTrace();
                        }
                    }
                }
            }
        }
    }
}

建表,初始化数据

create table resume(id long,name varchar(10),education varchar(10),state varchar(10));
insert into resume values(1,'张三','博士','未归档');
insert into resume values(2,'张二','博士','未归档');
insert into resume values(3,'李四','硕士','未归档');
insert into resume values(4,'李六','硕士','未归档');
insert into resume values(5,'王六','硕士','未归档');
insert into resume values(6,'王无','硕士','未归档');
insert into resume values(7,'赵六','本科','未归档');
insert into resume values(8,'赵八','本科','未归档');
insert into resume values(9,'小刚','本科','未归档');
insert into resume values(10,'小亮','本科','未归档');
insert into resume values(11,'小明','本科','未归档');
insert into resume values(12,'小花','专科','未归档');
insert into resume values(13,'龙龙','专科','未归档');
insert into resume values(14,'蓓蓓','博科','未归档');
insert into resume values(15,'阿珍','博科','未归档');
insert into resume values(16,'阿强','博士、','未归档');
insert into resume values(17,'杰克','博士、','未归档');
insert into resume values(18,'汤姆','博士、','未归档');
insert into resume values(19,'山姆','博士、','未归档');
insert into resume values(20,'山羊','博士、','未归档');

 3、执行器

public class ElasticJobMain {
    public static void main(String[] args) {
        //配置分布式协调服务中心(zookeeper)
        ZookeeperConfiguration zookeeperConfiguration = new ZookeeperConfiguration("101.132.167.18:2181","data-archive-job");
        CoordinatorRegistryCenter coordinatorRegistryCenter = new ZookeeperRegistryCenter(zookeeperConfiguration);
        coordinatorRegistryCenter.init();

        //配置任务(时间事件、定时任务业务逻辑、调度器)
        JobCoreConfiguration jobCoreConfiguration = JobCoreConfiguration.newBuilder("archive-job","*/2 * * * * ?",1).build();
        SimpleJobConfiguration simpleJobConfiguration = new SimpleJobConfiguration(jobCoreConfiguration,ArchivieJob.class.getName());
        //创建LiteJobConfiguration
        LiteJobConfiguration liteJobConfiguration = LiteJobConfiguration.newBuilder(simpleJobConfiguration).overwrite(true).build();
        new JobScheduler(coordinatorRegistryCenter,liteJobConfiguration).init();
    }
}

备注:可以使用 zooinspector 工具查看 zookeeper ,解压 zooinspector 安装包,执行 

java -jar zookeeper-dev-ZooInspector.jar

猜你喜欢

转载自blog.csdn.net/xingcsdnboke/article/details/129991663