<!-- 添加Apache HttpClient依赖 --> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.13</version> <!-- 可以根据需要选择其他版本 --> </dependency> ======================================================================== package com.xsj.xcx.config.doris; import org.apache.commons.codec.binary.Base64; import org.apache.http.HttpHeaders; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPut; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.DefaultRedirectStrategy; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import org.springframework.stereotype.Component; import java.io.IOException; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.UUID; @Component public class DorisStreamLoader { private static final String HOST = "120.24.151.143"; private static final int PORT = 28040; private static final String DATABASE = "xsj"; private static final String USER = "root"; private static final String PASSWD = "123456"; // private static final String label = "test-write"; /** * 构建HttpClientBuilder */ private final static HttpClientBuilder httpClientBuilder = HttpClients .custom() .setRedirectStrategy(new DefaultRedirectStrategy() { @Override protected boolean isRedirectable(String method) { // If the connection target is FE, you need to deal with 307 redirect。 return true; } }); /** * 导入json数据 * * @param jsonData * @param tableName * @throws Exception */ public void loadJson(String jsonData, String tableName) throws Exception { try (CloseableHttpClient client = httpClientBuilder.build()) { HttpPut put = new HttpPut(String.format("http://%s:%s/api/%s/%s/_stream_load", HOST, PORT, DATABASE, tableName)); put.removeHeaders(HttpHeaders.CONTENT_LENGTH); put.removeHeaders(HttpHeaders.TRANSFER_ENCODING); put.setHeader(HttpHeaders.EXPECT, "100-continue"); put.setHeader(HttpHeaders.AUTHORIZATION, basicAuthHeader(USER, PASSWD)); // You can set stream load related properties in the Header, here we set label and column_separator. put.setHeader("label", UUID.randomUUID().toString()); put.setHeader("column_separator", ","); put.setHeader("format", "json"); //导入json数组 put.setHeader("strip_outer_array", "true"); // put.setHeader("Content-Type", "application/json; charset=utf-8"); // Set up the import file. Here you can also use StringEntity to transfer arbitrary data. StringEntity entity = new StringEntity(jsonData, Charset.forName("UTF-8")); //发送json数据需要设置contentType // entity.setContentType("application/json"); put.setEntity(entity); try (CloseableHttpResponse response = client.execute(put)) { String loadResult = ""; if (response.getEntity() != null) { loadResult = EntityUtils.toString(response.getEntity()); } final int statusCode = response.getStatusLine().getStatusCode(); if (statusCode != 200) { throw new IOException(String.format("Stream load failed. status: %s load result: %s", statusCode, loadResult)); } System.out.println("Get load result: " + loadResult); } } } /** * 用户名、密码 * * @param username * @param password * @return */ private String basicAuthHeader(String username, String password) { final String tobeEncode = username + ":" + password; byte[] encoded = Base64.encodeBase64(tobeEncode.getBytes(StandardCharsets.UTF_8)); return "Basic " + new String(encoded); } public static void main(String[] args) throws Exception { DorisStreamLoader loader = new DorisStreamLoader(); String jsonData = """ [ { "company":"武神公司", "machine_id":15, "production_line_id":28, "device_guid":"123168", "c_date":"2024-12-20", "c_time":"12:15", "status":"1", "record_time":"2024-12-10 09:21:00", "max_peak":12.12 } ] """; loader.loadJson(jsonData, "new_device_status_analysis"); } }