数据库管理员有个特殊的需求:
需要一个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库。
1package com.xxl.job.service.handler;
2
3import com.xxl.job.core.context.XxlJobHelper;
4import com.xxl.job.core.handler.IJobHandler;
5import org.springframework.jdbc.core.JdbcTemplate;
6import org.springframework.jdbc.datasource.DriverManagerDataSource;
7
8public class DemoGlueJobHandler extends IJobHandler {
9
10 @Override
11 public void execute() throws Exception {
12
13 DriverManagerDataSource ds = new DriverManagerDataSource();
14 ds.setDriverClassName("com.mysql.jdbc.Driver");
15 ds.setUrl("jdbc:mysql://localhost:3306/users?characterEncoding=UTF-8&useSSL=false");
16 ds.setUsername("root");
17 ds.setPassword("xxxxxxxx");
18
19 JdbcTemplate jdbcTemplate = new JdbcTemplate();
20 jdbcTemplate.setDataSource(ds);
21
22
23 List rows = jdbcTemplate.queryForList("select * from user");
24 Iterator it = rows.iterator();
25 while(it.hasNext()) {
26 Map userMap = (Map) it.next();
27 XxlJobHelper.log(userMap.get("id") + "\t");
28 XxlJobHelper.log(userMap.get("name") + "\t");
29 }
30
31 XxlJobHelper.log("XXL-JOB guning, Hello World.");
32 }
33
34
35}
为了实现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包。
1 <dependency>
2 <groupId>org.springframework</groupId>
3 <artifactId>spring-jdbc</artifactId>
4 <version>4.3.2.RELEASE</version>
5 </dependency>
6 <dependency>
7 <groupId>mysql</groupId>
8 <artifactId>mysql-connector-java</artifactId>
9 <version>${mysql-connector-java.version}</version>
10 </dependency>
启动agent的systemd服务脚本,/etc/systemd/system/xxljob-agent.service
1[Unit]
2After=network.target
3Wants=network.target
4
5[Service]
6WorkingDirectory=/usr/local/bin
7Type=simple
8ExecStart=/usr/bin/java -jar /usr/local/bin/xxl-job-executor-sample-springboot-2.3.0.jar
9Restart=on-failure
10
11[Install]
12WantedBy=multi-user.target
这样就OK了。