2026.1.13提交,jyt版本
This commit is contained in:
5
.idea/codeStyles/codeStyleConfig.xml
generated
Normal file
5
.idea/codeStyles/codeStyleConfig.xml
generated
Normal file
@@ -0,0 +1,5 @@
|
||||
<component name="ProjectCodeStyleConfiguration">
|
||||
<state>
|
||||
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
|
||||
</state>
|
||||
</component>
|
||||
46
src/main/java/com/bigdata/config/MultiPortConfig.java
Normal file
46
src/main/java/com/bigdata/config/MultiPortConfig.java
Normal 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;
|
||||
}
|
||||
}
|
||||
41
src/main/java/com/bigdata/controller/PhoenixController.java
Normal file
41
src/main/java/com/bigdata/controller/PhoenixController.java
Normal 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);
|
||||
}
|
||||
}
|
||||
139
src/main/java/com/bigdata/util/PhoenixJdbcUtil.java
Normal file
139
src/main/java/com/bigdata/util/PhoenixJdbcUtil.java
Normal 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;
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
server:
|
||||
port: 8081
|
||||
additional-ports: 8080
|
||||
|
||||
spring:
|
||||
mvc:
|
||||
|
||||
Reference in New Issue
Block a user