2026.1.13提交,jyt版本

This commit is contained in:
wangran
2026-01-13 19:59:17 +08:00
parent ea9b3bf33e
commit 0a9d6edb9b
5 changed files with 232 additions and 0 deletions

5
.idea/codeStyles/codeStyleConfig.xml generated Normal file
View File

@@ -0,0 +1,5 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
</state>
</component>

View File

@@ -0,0 +1,46 @@
package com.bigdata.config;
import org.apache.coyote.http11.Http11NioProtocol;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.server.WebServerFactoryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MultiPortConfig {
// 读取配置文件中的额外端口8080
@Value("${server.additional-ports:}")
private String additionalPorts;
@Bean
public WebServerFactoryCustomizer<TomcatServletWebServerFactory> webServerFactoryCustomizer() {
return factory -> {
if (additionalPorts != null && !additionalPorts.trim().isEmpty()) {
for (String portStr : additionalPorts.split(",")) {
int port = Integer.parseInt(portStr.trim());
// 修正构造函数:先实例化 Http11NioProtocol再传入 Connector
factory.addAdditionalTomcatConnectors(createConnector(port));
}
}
};
}
// 重构 Connector 创建逻辑,适配 Tomcat 9.x
private org.apache.catalina.connector.Connector createConnector(int port) {
// 1. 先实例化 HTTP 协议对象
Http11NioProtocol protocol = new Http11NioProtocol();
// 2. 设置协议的端口
protocol.setPort(port);
// 3. 创建 Connector 并传入实例化的协议对象Tomcat 9.x 正确写法)
org.apache.catalina.connector.Connector connector = new org.apache.catalina.connector.Connector(protocol);
// 4. 补充必要配置
connector.setPort(port); // 绑定端口
connector.setScheme("http"); // HTTP 协议
connector.setSecure(false); // 非 HTTPS
connector.setURIEncoding("UTF-8");// 编码格式
return connector;
}
}

View File

@@ -0,0 +1,41 @@
package com.bigdata.controller;
import com.bigdata.util.PhoenixJdbcUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
/**
* 测试控制器:读取 NWQUALITY 表数据并返回
*/
@RestController
@RequestMapping("/phoenix")
public class PhoenixController {
// 注入工具类
@Autowired
private PhoenixJdbcUtil phoenixJdbcUtil;
/**
* 读取 NWQUALITY 表所有数据
* 访问地址http://localhost:8080/phoenix/nwquality/all
*/
@GetMapping("/nwquality/all")
public List<Map<String, Object>> getAllNWQualityData() {
return phoenixJdbcUtil.readNWQualityData();
}
/**
* 读取 NWQUALITY 表指定列数据示例id 和 value 列)
* 访问地址http://localhost:8080/phoenix/nwquality/columns
*/
@GetMapping("/nwquality/columns")
public List<Map<String, Object>> getSpecifiedColumns() {
// 替换成你实际需要查询的列名
String columns = "id, quality_value, create_time";
return phoenixJdbcUtil.readNWQualityData(columns);
}
}

View File

@@ -0,0 +1,139 @@
package com.bigdata.util;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Phoenix JDBC 操作工具类
* 用于读取 HBase 中 NWQUALITY 表数据
*/
@Component
public class PhoenixJdbcUtil {
// 从配置文件读取 Phoenix 连接 URL
@Value("${spring.datasource.url}")
private String phoenixUrl;
// Phoenix 驱动类名(固定)
private static final String PHOENIX_DRIVER = "org.apache.phoenix.jdbc.PhoenixDriver";
/**
* 读取 NWQUALITY 表的所有数据
* @return 表数据列表,每个元素是一行数据的键值对
*/
public List<Map<String, Object>> readNWQualityData() {
// 结果集容器
List<Map<String, Object>> resultList = new ArrayList<>();
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
// 1. 加载 Phoenix 驱动
Class.forName(PHOENIX_DRIVER);
// 2. 建立连接Phoenix 无需用户名密码)
conn = DriverManager.getConnection(phoenixUrl);
// 3. 创建 Statement
stmt = conn.createStatement();
// 4. 执行查询 SQL查询 NWQUALITY 表所有数据)
// 注意Phoenix 表名/列名默认区分大小写,若表名是小写需用双引号包裹
String sql = "SELECT * FROM NWQUALITY";
rs = stmt.executeQuery(sql);
// 5. 获取结果集的元数据(列名、列数)
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
// 6. 解析结果集,封装成 Map 列表
while (rs.next()) {
Map<String, Object> rowMap = new HashMap<>();
for (int i = 1; i <= columnCount; i++) {
// 获取列名和列值
String columnName = metaData.getColumnName(i);
Object columnValue = rs.getObject(i);
rowMap.put(columnName, columnValue);
}
resultList.add(rowMap);
}
System.out.println("成功读取 NWQUALITY 表数据,共 " + resultList.size() + "");
} catch (ClassNotFoundException e) {
System.err.println("Phoenix 驱动加载失败:" + e.getMessage());
throw new RuntimeException("Phoenix 驱动加载失败", e);
} catch (SQLException e) {
System.err.println("JDBC 操作失败:" + e.getMessage());
System.err.println("请检查1. hadoop102 的 ZooKeeper 是否启动 2. NWQUALITY 表是否存在 3. 网络是否可达");
throw new RuntimeException("读取 NWQUALITY 表数据失败", e);
} finally {
// 7. 关闭资源(逆序关闭)
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
System.err.println("关闭 JDBC 资源失败:" + e.getMessage());
}
}
return resultList;
}
/**
* 重载方法:读取 NWQUALITY 表的指定列数据
* @param columns 要查询的列名(如 "id, name, value"
* @return 指定列的表数据
*/
public List<Map<String, Object>> readNWQualityData(String columns) {
List<Map<String, Object>> resultList = new ArrayList<>();
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName(PHOENIX_DRIVER);
conn = DriverManager.getConnection(phoenixUrl);
stmt = conn.createStatement();
// 执行指定列的查询
String sql = String.format("SELECT %s FROM NWQUALITY", columns);
rs = stmt.executeQuery(sql);
ResultSetMetaData metaData = rs.getMetaData();
int columnCount = metaData.getColumnCount();
while (rs.next()) {
Map<String, Object> rowMap = new HashMap<>();
for (int i = 1; i <= columnCount; i++) {
String columnName = metaData.getColumnName(i);
Object columnValue = rs.getObject(i);
rowMap.put(columnName, columnValue);
}
resultList.add(rowMap);
}
System.out.println("成功读取 NWQUALITY 表[" + columns + "]列数据,共 " + resultList.size() + "");
} catch (Exception e) {
System.err.println("读取指定列数据失败:" + e.getMessage());
throw new RuntimeException(e);
} finally {
// 关闭资源
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
System.err.println("关闭资源失败:" + e.getMessage());
}
}
return resultList;
}
}

View File

@@ -1,5 +1,6 @@
server:
port: 8081
additional-ports: 8080
spring:
mvc: