数据库管理员有个特殊的需求:

需要一个msyql客户端,可以定时去连接mysql服务器执行SQL语句。且可以自己动态编辑SQL语句。

找来找去,数据库管理员对spring java这类东西吧一无所知,但是通晓SQL,这种情形XXL-JOB的EXECUTOR代位执行就比较适合。

主控地址:http://172.18.31.13/xxl-job-admin/

使用很简单,我们在172.18.31.14装一个被控端的executor,运行模式选择GLUE(Java)模式,GLUE模式就可以随便编辑 JAVA+SQL源代码了。设置执行频率是每30分钟执行一次。

选择GLUE模式后,我们就可以在GLUE IDE里编辑代码:

代码如下: 注:在172.18.31.14上面已经装了一个MySQL服务端,有一个user库。

package com.xxl.job.service.handler;

import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.IJobHandler;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

public class DemoGlueJobHandler extends IJobHandler {

	@Override
	public void execute() throws Exception {

        DriverManagerDataSource ds = new DriverManagerDataSource();
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql://localhost:3306/users?characterEncoding=UTF-8&useSSL=false");
        ds.setUsername("root");
        ds.setPassword("xxxxxxxx");

        JdbcTemplate jdbcTemplate = new JdbcTemplate();
        jdbcTemplate.setDataSource(ds);
      

        List rows = jdbcTemplate.queryForList("select * from user"); 
        Iterator it = rows.iterator(); 
        while(it.hasNext()) { 
            Map userMap = (Map) it.next(); 
            XxlJobHelper.log(userMap.get("id") + "\t"); 
            XxlJobHelper.log(userMap.get("name") + "\t"); 
        } 
      
        XxlJobHelper.log("XXL-JOB guning, Hello World.");
	}

  
}

为了实现mysql客户端可以对MySQL进行读写,我们需要在xxl-job的xxl-job-executor-sample-springboot示例项目中,pom.xml中增加spring-jdbc和mysql-connector-java的jar包部分。打出一个xxl-job的executor的执行端程序。

代码在 /root/xxl-job-2.3.0/xxl-job-executor-samples/xxl-job-executor-sample-springboot目录下,用mvn package就可以打出xxl-job-executor-sample-springboot-2.3.0.jar包。

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.3.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql-connector-java.version}</version>
        </dependency>

启动agent的systemd服务脚本,/etc/systemd/system/xxljob-agent.service

[Unit]  
After=network.target  
Wants=network.target  

[Service]  
WorkingDirectory=/usr/local/bin
Type=simple  
ExecStart=/usr/bin/java -jar /usr/local/bin/xxl-job-executor-sample-springboot-2.3.0.jar
Restart=on-failure  

[Install]  
WantedBy=multi-user.target 

这样就OK了。