ClassNotFoundException: org.apache.http.util.Args错误处理记录

报错关键词:

java.lang.NoClassDefFoundError: org/apache/http/util/Args Caused by: java.lang.ClassNotFoundException: org.apache.http.util.Args

猜测是版本冲突导致的方法找不到

解决办法:

参考https://www.manongdao.com/article-1308949.html
加入依赖补充缺失的方法即可

		<dependency> 
		        <groupId>org.apache.httpcomponents</groupId> 
		        <artifactId>httpcore</artifactId> 
		        <version>4.4.1</version>
				<scope>provided</scope>
		</dependency>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 以下是基于Curator 5.0.0版本实现MySQL连接节点注册的完整Java代码: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Collections; import java.util.List; import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.recipes.cache.ChildData; import org.apache.curator.framework.recipes.cache.NodeCache; import org.apache.curator.framework.recipes.cache.NodeCacheListener; import org.apache.curator.framework.recipes.cache.PathChildrenCache; import org.apache.curator.framework.recipes.cache.PathChildrenCacheEvent; import org.apache.curator.framework.recipes.cache.PathChildrenCacheListener; import org.apache.curator.framework.recipes.cache.PathChildrenCacheStartMode; import org.apache.curator.framework.recipes.nodes.PersistentNode; import org.apache.curator.framework.recipes.nodes.PersistentNode.Mode; import org.apache.curator.utils.CloseableUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class MySQLConnectionRegistry { private static final Logger LOGGER = LoggerFactory.getLogger(MySQLConnectionRegistry.class); private static final String ZK_CONNECTION_STRING = "localhost:2181"; private static final String ZK_CONNECTION_NODE = "/mysql/connection"; private static final String MYSQL_URL = "jdbc:mysql://localhost:3306/mydb"; private static final String MYSQL_USERNAME = "root"; private static final String MYSQL_PASSWORD = "password"; private static final List<String> EMPTY_CHILDREN = Collections.emptyList(); private CuratorFramework client; private PersistentNode connectionNode; private Connection connection; private NodeCache connectionCache; private PathChildrenCache childrenCache; public void start() throws Exception { client = CuratorFrameworkFactory.newClient(ZK_CONNECTION_STRING, new ExponentialBackoffRetry(1000, 3)); client.start(); connection = DriverManager.getConnection(MYSQL_URL, MYSQL_USERNAME, MYSQL_PASSWORD); connectionNode = new PersistentNode(client, Mode.EPHEMERAL, ZK_CONNECTION_NODE, connection.toString().getBytes()); connectionNode.start(); connectionNode.waitForInitialCreate(5000, TimeUnit.MILLISECONDS); LOGGER.info("MySQL connection registered in ZooKeeper: {}", connectionNode.getActualPath()); connectionCache = new NodeCache(client, ZK_CONNECTION_NODE); connectionCache.getListenable().addListener(new NodeCacheListener() { @Override public void nodeChanged() throws Exception { ChildData data = connectionCache.getCurrentData(); if (data != null) { String connectionString = new String(data.getData(), StandardCharsets.UTF_8); LOGGER.info("MySQL connection updated in ZooKeeper: {}", connectionString); } else { LOGGER.info("MySQL connection removed from ZooKeeper"); } } }); connectionCache.start(); childrenCache = new PathChildrenCache(client, ZK_CONNECTION_NODE, true); childrenCache.getListenable().addListener(new PathChildrenCacheListener() { @Override public void childEvent(CuratorFramework client, PathChildrenCacheEvent event) throws Exception { switch (event.getType()) { case CHILD_ADDED: LOGGER.info("Child node added: {}", event.getData().getPath()); break; case CHILD_REMOVED: LOGGER.info("Child node removed: {}", event.getData().getPath()); break; case CHILD_UPDATED: LOGGER.info("Child node updated: {}", event.getData().getPath()); break; default: break; } } }); childrenCache.start(PathChildrenCacheStartMode.BUILD_INITIAL_CACHE); LOGGER.info("MySQL connection node watcher started"); } public void stop() { CloseableUtils.closeQuietly(connectionCache); CloseableUtils.closeQuietly(childrenCache); CloseableUtils.closeQuietly(connectionNode); CloseableUtils.closeQuietly(client); LOGGER.info("MySQL connection registry stopped"); } public static void main(String[] args) throws Exception { MySQLConnectionRegistry registry = new MySQLConnectionRegistry(); registry.start(); System.in.read(); registry.stop(); } } ``` 该代码实现了以下功能: 1. 在ZooKeeper中注册一个临时节点,使用MySQL连接字符串作为节点数据。 2. 监听该节点的更新事件,当节点数据更新时输出日志。 3. 监听该节点下的子节点事件,当子节点添加、删除或更新时输出日志。 4. 在程序启动时创建MySQL连接,程序停止时关闭连接。 需要注意的是,该代码中使用的MySQL驱动程序版本应与MySQL服务器版本兼容。如果使用的是其他数据库,需要相应地修改连接字符串、用户名和密码。 ### 回答2: 以下是一个使用Curator注册MySQL连接节点并存储实际连接对象或连接状态的完整实现代码示例: ```java import org.apache.curator.framework.CuratorFramework; import org.apache.curator.framework.recipes.nodes.PersistentEphemeralNode; import org.apache.curator.framework.recipes.nodes.PersistentNode; import org.apache.curator.framework.recipes.nodes.PersistentNode.Mode; import org.apache.curator.framework.state.ConnectionState; import org.apache.curator.framework.state.ConnectionStateListener; import org.apache.curator.utils.CloseableUtils; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; public class MySQLConnectionRegistry { private CuratorFramework client; private PersistentEphemeralNode node; private Connection connection; public MySQLConnectionRegistry(CuratorFramework curatorFramework) { this.client = curatorFramework; this.connection = createConnection(); } public void start() throws Exception { // 监听Curator客户端连接状态,确保连接建立成功后注册节点 ConnectionStateListener connectionStateListener = new ConnectionStateListener() { @Override public void stateChanged(CuratorFramework client, ConnectionState newState) { if (newState == ConnectionState.CONNECTED || newState == ConnectionState.RECONNECTED) { try { registerNode(); } catch (Exception e) { e.printStackTrace(); } } } }; client.getConnectionStateListenable().addListener(connectionStateListener); client.start(); } public void stop() { if (node != null) { CloseableUtils.closeQuietly(node); } CloseableUtils.closeQuietly(client); closeConnection(); } private void registerNode() throws Exception { if (node != null) { CloseableUtils.closeQuietly(node); } // 创建一个持久化的临时节点 node = new PersistentEphemeralNode(client, Mode.EPHEMERAL, "/mysql/connection", connectionToBytes(), ""); node.start(); node.waitForInitialCreate(5000); // 等待节点创建 // 当节点数据发生更改时,更新连接状态 node.getListenable().addListener(() -> { if (node.isActuallyStarted()) { // 更新连接状态 updateConnectionStatus(bytesToConnection(node.getData())); } }); } private Connection createConnection() { Connection connection = null; try { Class.forName("com.mysql.jdbc.Driver"); // 加载MySQL驱动 connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "username", "password"); } catch (ClassNotFoundException | SQLException e) { e.printStackTrace(); } return connection; } private byte[] connectionToBytes() throws SQLException { return connection.toString().getBytes(); } private Connection bytesToConnection(byte[] data) { try { String connectionStr = new String(data); // 从连接字符串中解析连接参数,创建新的连接对象 // ... // 这里假设连接参数都存在字符串中 String[] params = connectionStr.split(";"); Connection newConnection = DriverManager.getConnection(params[0], params[1], params[2]); return newConnection; } catch (SQLException e) { e.printStackTrace(); return null; } } private void updateConnectionStatus(Connection newConnection) { closeConnection(); connection = newConnection; } private void closeConnection() { if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } public static void main(String[] args) throws Exception { // 创建Curator客户端 CuratorFramework curatorFramework = CuratorFrameworkFactory.builder() .connectString("localhost:2181") .sessionTimeoutMs(5000) .retryPolicy(new ExponentialBackoffRetry(1000, 3)) .build(); MySQLConnectionRegistry registry = new MySQLConnectionRegistry(curatorFramework); registry.start(); // 主线程不退出,保持连接节点的注册状态 ExecutorService executorService = Executors.newSingleThreadExecutor(); executorService.awaitTermination(Long.MAX_VALUE, TimeUnit.SECONDS); executorService.shutdown(); registry.stop(); } } ``` 请注意,由于Java18和MySQL8.0.21可能不存在,上述代码中使用的是Java8和MySQL8.0.21的示例连接配置,你需要根据实际情况进行修改。 此实现使用Curator的PersistentEphemeralNode来创建一个持久化的临时节点。在节点注册时,会将MySQL连接对象转换为字节数组并存储在节点上。当节点数据发生更改时,可以监听节点的变化并更新连接状态。 请根据你的实际情况修改连接字符串、用户名和密码等连接参数。此代码仅用于示范,请按照实际需要进行修改和调整。 ### 回答3: 要实现Curator注册的MySQL连接节点中存储实际的连接对象或连接状态,可以按照以下步骤进行操作。 首先,确保已经正确安装了Curator和MySQL驱动程序。 然后,创建一个Curator客户端,用于与Zookeeper通信,并创建一个Zookeeper连接。 ```java CuratorFramework client = CuratorFrameworkFactory.newClient("localhost:2181", new RetryNTimes(5, 1000)); client.start(); ``` 接下来,创建一个节点,用于存储MySQL连接对象或连接状态。这里以"/mysql/connection"为节点路径。 ```java String path = "/mysql/connection"; byte[] data = null; client.create().creatingParentsIfNeeded().withMode(CreateMode.EPHEMERAL).forPath(path, data); ``` 然后,编写方法来获取MySQL连接对象或连接状态。 ```java public String getConnectionStatus() { Connection connection = null; String status = "Not connected"; try { // 尝试连接MySQL数据库 connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password"); status = connection.isValid(5) ? "Connected" : "Not connected"; } catch (SQLException e) { e.printStackTrace(); } finally { // 关闭连接 if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } return status; } ``` 接下来,在连接状态改变时,更新Zookeeper节点中的数据。 ```java String connectionStatus = getConnectionStatus(); String data = connectionStatus.getBytes(); client.setData().forPath(path, data); ``` 搭建完整代码的主类。 ```java public class CuratorMySQLExample { private static CuratorFramework client; public static void main(String[] args) throws Exception { client = CuratorFrameworkFactory.newClient("localhost:2181", new RetryNTimes(5, 1000)); client.start(); String path = "/mysql/connection"; byte[] data = null; client.create().creatingParentsIfNeeded().withMode(CreateMode.EPHEMERAL).forPath(path, data); // 声明一个定时任务,每5秒更新一次连接状态 ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor(); executorService.scheduleAtFixedRate(() -> { String connectionStatus = getConnectionStatus(); byte[] data = connectionStatus.getBytes(); try { client.setData().forPath(path, data); System.out.println("Connection status updated: " + connectionStatus); } catch (Exception e) { e.printStackTrace(); } }, 0, 5, TimeUnit.SECONDS); Thread.sleep(Integer.MAX_VALUE); } public static String getConnectionStatus() { Connection connection = null; String status = "Not connected"; try { connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password"); status = connection.isValid(5) ? "Connected" : "Not connected"; } catch (SQLException e) { e.printStackTrace(); } finally { if (connection != null) { try { connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } return status; } } ``` 以上是使用Curator和Java代码实现存储MySQL连接对象或连接状态的完整实现代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值