datax 拼裝json-java方式

该代码示例展示了如何使用Java连接到MySQL数据库,获取表名、列信息,并解析JSON文件以生成配置文件。主要涉及DataX数据同步工具,包括读取数据库表结构、写入JSON文件及文件生成操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package kafkaMQ;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
/**
 * datax 拼裝模板
 * @author 15011
 *
 */
public class ExampleTest {
	@SuppressWarnings("resource")
	public static void main(String[] args) {
//		String dbName = "user_system";
//		List<Object> tables = getTables(dbName, getConn());
		String tableName= "t_user";
		List<Object> column = getColumn(tableName, getConn());
		JSONObject wp = parseFile(false);
		List<Map> list = new ArrayList<>();
		column.forEach(o->{
			Map map = (Map)o;
			Object columnName = map.get("COLUMN_NAME");
			Object dataType = map.get("DATA_TYPE");
			Map<Object, Object> temp = new HashMap<>();
			temp.put("value", columnName);
			temp.put("type", dataType);
			list.add(temp);
		});
		wp.put("column", list);
		generateFile("测试.json", wp);
		System.out.println("文件生成成功!");
	}
	
	@SuppressWarnings("resource")
	public static void generateFile(String fileName, JSONObject obj) {
		File file = new File("D:\\eclipse-workspace\\kafkaMQ\\"+fileName);
		FileOutputStream fos = null;
		try {
			fos = new FileOutputStream(file);
			byte[] bytes = obj.toJSONString().getBytes();
			fos.write(bytes);
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			try {
				fos.close();
			} catch (IOException e) { }
		}
	}
	
	public static JSONObject parseFile(boolean isReader) {
		JSONObject[] container = new JSONObject[2];
		File file = new File("D:\\eclipse-workspace\\kafkaMQ\\job.json");
		BufferedReader br = null;
		InputStreamReader isr = null;
		try {
			isr = new InputStreamReader(new FileInputStream(file));
			br = new BufferedReader(isr);
			String data = null;
			StringBuilder builder = new StringBuilder();
			while ((data = br.readLine()) != null) {
				builder.append(data);
			}
			data = builder.toString();
			JSONObject parseObject = JSON.parseObject(data);
			JSONObject jsonObject = parseObject.getJSONObject("job");
			JSONArray content = jsonObject.getJSONArray("content");
			JSONObject contents = content.getJSONObject(0);
			JSONObject r = contents.getJSONObject("reader");
			JSONObject w = contents.getJSONObject("writer");
			JSONObject rp = r.getJSONObject("parameter");
			JSONObject wp = w.getJSONObject("parameter");
			
			List<Object> arrayList = new ArrayList<>();
			Map<Object, Object> map = new HashMap<>();
			map.put("id", "string");
			map.put("name", "string");
			arrayList.add(map);
			wp.put("column", arrayList);
			if(isReader) 
				return rp;
			return wp;
		} catch (Exception e) {
			e.printStackTrace();
		} finally {
			try {
				isr.close();
				br.close();
			} catch (IOException e) { }
		}
		return null;
	}
	
	public static Connection getConn() {
		String url = "jdbc:mysql://127.0.0.1:3306/mysql?serverTimezone=UTC&characterEncoding=UTF-8";
    	String account = "root";
    	String pwd = "root";
		try {
			Class.forName("com.mysql.cj.jdbc.Driver");
        } catch(ClassNotFoundException e){ try {
			Class.forName("com.mysql.jdbc.Driver");
			System.out.println("mysql连接失败,自动纠正"); } catch (ClassNotFoundException e1) {}
        }
		Connection con = null;
		try {
			con = DriverManager.getConnection(url,account,pwd);
			System.out.println("连接获取成功。。。");
		} catch (SQLException e) {
			e.printStackTrace();
			System.out.println("连接失败-请检查url-account-pwd");
		}
		return con;
	}
	
	public static List<Object> getTables(String dbName, Connection connection) {
		
		String sql = "select table_name from information_schema.tables where table_schema='"+dbName+"'";
		return query(sql,connection);
	}
	public static List<Object> getColumn(String tableName, Connection connection) {
		String sql = "select COLUMN_NAME,DATA_TYPE,CHARACTER_MAXIMUM_LENGTH from information_schema.COLUMNS where table_name = '"+tableName+"'";
		return query(sql,connection);
	}
	
	//调用它的方法如下:
		public static List<Object> query(String sql,Connection connection){
			List<Object> list = null;
			PreparedStatement pStatement = null;
			try {
				//3.准备SQL语句
				pStatement = connection.prepareStatement(sql);
				//4.执行SQL语句
				ResultSet rs = pStatement.executeQuery();
				//检索此 ResultSet对象的列的数量,类型和属性。
				ResultSetMetaData data = rs.getMetaData();
				//返回此 ResultSet对象中的列数。
				int column = data.getColumnCount();
				list = new ArrayList<>();
				//5.处理结果遍历要查询的数据
				
				while (rs.next()) {
					Map<String, Object> map = new HashMap<>();
					for(int i = 1;i<=column;i++) {
						String columnName = data.getColumnName(i);
						map.put(columnName, rs.getObject(i));
					}
					list.add(map);
				}
				rs.close();
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				//6.关闭连接
				try {
					pStatement.close();
					connection.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			return list;
		}
}

 

### 卸载 DataXdatax-web 的方法 #### 数据清理与环境还原 卸载 DataX 或者 datax-web 主要涉及删除其安装文件以及配置数据。以下是具体操作: 1. **停止运行的服务** 如果当前有正在运行的 DataXdatax-web 实例,需先通过以下命令终止服务进程: ```bash ps -ef | grep datax kill -9 <PID> ``` 这里 `<PID>` 是对应进程的 ID[^2]。 2. **删除解压后的目录** 删除已解压并重命名的数据目录 `datax` 和 `datax-web` 所在路径下的所有内容。例如: ```bash rm -rf /path/to/datax/ rm -rf /path/to/datax-web/ ``` 3. **移除日志文件** 日志通常存储于 `/logs/` 子目录下或者自定义的日志位置。可以执行如下命令清除这些记录: ```bash rm -rf /path/to/logs/* ``` 4. **恢复防火墙设置(如果之前修改过)** 若曾按照前置条件关闭了系统的防火墙,则可以根据需求重新启用它: ```bash systemctl start firewalld.service systemctl enable firewalld.service ``` 5. **Yum 换源回滚(可选步骤)** 对于更换过的 YUM 软件仓库地址,在不需要继续使用的情况下可以选择将其改回到默认值或其他镜像站点链接上[^3]。 6. **确认无残留依赖项** 检查是否存在其他因部署而新增加的相关软件包或库版本冲突情况,并酌情处理它们。 以上即为完整的卸载流程描述,确保每一步都准确完成才能彻底移除这两个组件及其影响。 ```python import os def check_and_remove(path): if os.path.exists(path): try: os.system(f'rm -r {path}') print(f'Successfully removed: {path}') except Exception as e: print(e) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值