/** * 进阶题测试类 * 测试动态配置管理系统和边车模式功能 */ import java.util.HashMap; import java.util.Map; public class AdvancedExampleTest { // 辅助方法:重复字符 private static String repeatChar(char c, int count) { StringBuilder sb = new StringBuilder(count); for (int i = 0; i < count; i++) { sb.append(c); } return sb.toString(); } public static void main(String[] args) { System.out.println("=== 进阶题测试开始 ===\n"); // 测试动态配置管理系统 testDynamicConfigManager(); System.out.println("\n" + repeatChar('-', 50) + "\n"); // 测试边车模式 testSidecar(); System.out.println("\n=== 进阶题测试完成 ==="); } // 测试动态配置管理系统 private static void testDynamicConfigManager() { System.out.println("1. 测试动态配置管理系统功能"); // 获取配置管理器实例 DynamicConfigManager configManager = DynamicConfigManager.getInstance(); // 添加配置监听器 configManager.addListener(new DynamicConfigManager.ConfigChangeListener() { @Override public void onConfigChange(String key, Object oldValue, Object newValue) { System.out.println("监听器收到配置变更通知: "); System.out.println(" 键: " + key); System.out.println(" 旧值: " + oldValue); System.out.println(" 新值: " + newValue); } }); // 设置单个配置 System.out.println("\n设置单个配置:"); configManager.setConfig("server.port", 8080); configManager.setConfig("database.url", "jdbc:mysql://localhost:3306/test"); configManager.setConfig("logging.level", "INFO"); configManager.setConfig("feature.cache.enabled", true); // 获取配置 System.out.println("\n获取配置值:"); int port = configManager.getConfig("server.port", 8080); String dbUrl = configManager.getConfig("database.url", ""); String logLevel = configManager.getConfig("logging.level", "DEBUG"); boolean cacheEnabled = configManager.getConfig("feature.cache.enabled", false); String nonExistent = configManager.getConfig("non.existent", "默认值"); System.out.println("server.port = " + port); System.out.println("database.url = " + dbUrl); System.out.println("logging.level = " + logLevel); System.out.println("feature.cache.enabled = " + cacheEnabled); System.out.println("non.existent = " + nonExistent); // 热更新配置测试 System.out.println("\n测试配置热更新:"); System.out.println("更新前的日志级别: " + configManager.getConfig("logging.level", "DEBUG")); configManager.setConfig("logging.level", "DEBUG"); // 触发监听器 System.out.println("更新后的日志级别: " + configManager.getConfig("logging.level", "DEBUG")); // 批量更新配置 System.out.println("\n批量更新配置:"); Map batchConfigs = new HashMap<>(); batchConfigs.put("cache.size", 1000); batchConfigs.put("timeout.seconds", 30); batchConfigs.put("retries.max", 3); configManager.setConfigs(batchConfigs); // 查看所有配置 System.out.println("\n当前所有配置键:"); System.out.println(configManager.getAllKeys()); System.out.println("配置总数: " + configManager.size()); // 移除配置 System.out.println("\n移除配置:"); configManager.removeConfig("cache.size"); System.out.println("移除后配置总数: " + configManager.size()); System.out.println("cache.size 是否存在: " + configManager.containsKey("cache.size")); } // 测试边车模式 private static void testSidecar() { System.out.println("2. 测试边车模式功能"); // 创建边车实例 Sidecar sidecar = new Sidecar("test-app-v1"); // 添加边车功能 System.out.println("\n添加边车功能:"); sidecar.addFeature(new Sidecar.LoggingFeature()); sidecar.addFeature(new Sidecar.MonitoringFeature()); // 添加自定义功能 sidecar.addFeature(new Sidecar.SidecarFeature() { @Override public String getName() { return "安全检查"; } @Override public void start() { System.out.println("安全检查功能已启动"); } @Override public void stop() { System.out.println("安全检查功能已停止"); } @Override public void handleRequest(Sidecar.RequestContext context) { System.out.println("安全检查: 请求 " + context.getRequestId() + " 路径 " + context.getPath()); // 模拟安全检查 if (context.getPath().contains("admin") && !context.getPath().startsWith("/api/auth")) { context.markError("未授权访问管理路径"); } } }); // 启动边车 System.out.println("\n启动边车:"); sidecar.start(); // 测试同步请求处理 System.out.println("\n测试同步请求处理:"); sidecar.handleRequestSync("req-001", "/api/users/list"); sidecar.handleRequestSync("req-002", "/api/products/123"); // 测试未授权请求(应该被安全检查拦截) System.out.println("\n测试未授权请求:"); sidecar.handleRequestSync("req-003", "/api/admin/dashboard"); // 测试异步请求处理 System.out.println("\n测试异步请求处理:"); for (int i = 4; i <= 10; i++) { sidecar.handleRequestAsync("req-" + String.format("%03d", i), "/api/async/test/" + i); } // 等待异步请求处理完成 try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } // 查看统计信息 System.out.println("\n边车统计信息:"); System.out.println(sidecar.getStats()); // 停止边车 System.out.println("\n停止边车:"); sidecar.stop(); // 测试边车停止后的请求处理 System.out.println("\n测试边车停止后的请求处理:"); sidecar.handleRequestSync("req-011", "/api/test/stopped"); } }