3

xxl-job的动态编辑并执行java脚本

 9 months ago
source link: https://bajie.dev/posts/20231212-xxl-job/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Xxl-Job的动态编辑并执行java脚本

2023-12-12 2 分钟阅读

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

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

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

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

2022-02-07_091252.png

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

2022-02-07_091351.png

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

2022-02-07_091558.png

代码如下: 注:在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>
fallback

启动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 
fallback

这样就OK了。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK