Explorar el Código

因服务器问题 新的一台服务器需要用 application-druid-myhk-new.yml这个配置文件

xgb hace 1 semana
padre
commit
c56366ce1f

+ 167 - 0
fs-service/src/main/resources/application-druid-myhk-new.yml

@@ -0,0 +1,167 @@
+# 数据源配置
+spring:
+    profiles:
+        include: config-myhk,common
+    # redis 配置
+    redis:
+        host: cd-crs-ad9b2lw2.sql.tencentcdb.com
+        port: 20547
+        # 数据库索引
+        database: 0
+        # 密码
+        password: myhk888777666.
+        # 连接超时时间
+        timeout: 10s
+        lettuce:
+            pool:
+                # 连接池中的最小空闲连接
+                min-idle: 0
+                # 连接池中的最大空闲连接
+                max-idle: 8
+                # 连接池的最大数据库连接数
+                max-active: 100
+                # #连接池最大阻塞等待时间(使用负值表示没有限制)
+                max-wait: -1ms
+    datasource:
+#        clickhouse:
+#            type: com.alibaba.druid.pool.DruidDataSource
+#            driverClassName: com.clickhouse.jdbc.ClickHouseDriver
+#            url: jdbc:clickhouse://1.14.104.71:8123/sop_test?compress=0&use_server_time_zone=true&use_client_time_zone=false&timezone=Asia/Shanghai
+#            username: rt_2024
+#            password: Yzx_19860213
+#            initialSize: 10
+#            maxActive: 100
+#            minIdle: 10
+#            maxWait: 6000
+        mysql:
+            type: com.alibaba.druid.pool.DruidDataSource
+            driverClassName: com.mysql.cj.jdbc.Driver
+            druid:
+                # 主库数据源
+                master:
+                    url: jdbc:mysql://cd-cdb-5vtn8yte.sql.tencentcdb.com:22680/fs_his?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                    #                  url: jdbc:mysql://172.27.0.17:3306/fs_his?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                    username: root
+                    password: myhk888777666.
+                # 从库数据源
+                slave:
+                    # 从数据源开关/默认关闭
+                    url: jdbc:mysql://cd-cdb-5vtn8yte.sql.tencentcdb.com:22680/fs_his?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                    #                  url: jdbc:mysql://172.27.0.17:3306/fs_his?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                    username: root
+                    password: myhk888777666.
+                # 初始连接数
+                initialSize: 5
+                # 最小连接池数量
+                minIdle: 10
+                # 最大连接池数量
+                maxActive: 20
+                # 配置获取连接等待超时的时间
+                maxWait: 60000
+                # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+                timeBetweenEvictionRunsMillis: 60000
+                # 配置一个连接在池中最小生存的时间,单位是毫秒
+                minEvictableIdleTimeMillis: 300000
+                # 配置一个连接在池中最大生存的时间,单位是毫秒
+                maxEvictableIdleTimeMillis: 900000
+                # 配置检测连接是否有效
+                validationQuery: SELECT 1 FROM DUAL
+                testWhileIdle: true
+                testOnBorrow: false
+                testOnReturn: false
+                webStatFilter:
+                    enabled: true
+                statViewServlet:
+                    enabled: true
+                    # 设置白名单,不填则允许所有访问
+                    allow:
+                    url-pattern: /druid/*
+                    # 控制台管理用户名和密码
+                    login-username: fs
+                    login-password: 123456
+                filter:
+                    stat:
+                        enabled: true
+                        # 慢SQL记录
+                        log-slow-sql: true
+                        slow-sql-millis: 1000
+                        merge-sql: true
+                    wall:
+                        config:
+                            multi-statement-allow: true
+        sop:
+            type: com.alibaba.druid.pool.DruidDataSource
+            driverClassName: com.mysql.cj.jdbc.Driver
+            druid:
+                # 主库数据源
+                master:
+                    url: jdbc:mysql://cd-cdb-5vtn8yte.sql.tencentcdb.com:22680/fs_his_sop?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                    #                  url: jdbc:mysql://172.27.0.17:3306/fs_his?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                    username: root
+                    password: myhk888777666.
+                # 从库数据源
+                slave:
+                    # 从数据源开关/默认关闭
+                    url: jdbc:mysql://cd-cdb-5vtn8yte.sql.tencentcdb.com:22680/fs_his_sop?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                    #                  url: jdbc:mysql://172.27.0.17:3306/fs_his?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                    username: root
+                    password: myhk888777666.
+                # 初始连接数
+                initialSize: 5
+                # 最小连接池数量
+                minIdle: 10
+                # 最大连接池数量
+                maxActive: 20
+                # 配置获取连接等待超时的时间
+                maxWait: 60000
+                # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
+                timeBetweenEvictionRunsMillis: 60000
+                # 配置一个连接在池中最小生存的时间,单位是毫秒
+                minEvictableIdleTimeMillis: 300000
+                # 配置一个连接在池中最大生存的时间,单位是毫秒
+                maxEvictableIdleTimeMillis: 900000
+                # 配置检测连接是否有效
+                validationQuery: SELECT 1 FROM DUAL
+                testWhileIdle: true
+                testOnBorrow: false
+                testOnReturn: false
+                webStatFilter:
+                    enabled: true
+                statViewServlet:
+                    enabled: true
+                    # 设置白名单,不填则允许所有访问
+                    allow:
+                    url-pattern: /druid/*
+                    # 控制台管理用户名和密码
+                    login-username: fs
+                    login-password: 123456
+                filter:
+                    stat:
+                        enabled: true
+                        # 慢SQL记录
+                        log-slow-sql: true
+                        slow-sql-millis: 1000
+                        merge-sql: true
+                    wall:
+                        config:
+                            multi-statement-allow: true
+rocketmq:
+    name-server: rmq-16xj8o92zp.rocketmq.cd.qcloud.tencenttdmq.com:8080
+    producer:
+        group: my-producer-group
+        access-key: ak16xj8o92zp984557f83ba2 # 替换为实际的 accessKey
+        secret-key: sk2ff1c6b15b74b888 # 替换为实际的 secretKey
+    consumer:
+        group: common-group
+        access-key: ak16xj8o92zp984557f83ba2 # 替换为实际的 accessKey
+        secret-key: sk2ff1c6b15b74b888 # 替换为实际的 secretKey
+openIM:
+    secret: openIM123
+    userID: imAdmin
+    url: https://im.muyi88.com/api
+#是否使用新im
+im:
+    type: OPENIM
+#是否为新商户,新商户不走mpOpenId
+isNewWxMerchant: true
+

+ 4 - 4
fs-service/src/main/resources/application-druid-myhk-test.yml

@@ -48,10 +48,10 @@ spring:
                 # 从库数据源
                 slave:
                     # 从数据源开关/默认关闭
-                    enabled: false
-                    url:
-                    username:
-                    password:
+                    url: jdbc:mysql://cd-cdb-5vtn8yte.sql.tencentcdb.com:22680/fs_his?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                    #                  url: jdbc:mysql://172.27.0.17:3306/fs_his?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                    username: root
+                    password: myhk888777666.
                 # 初始连接数
                 initialSize: 5
                 # 最小连接池数量

+ 83 - 83
fs-user-app/src/test/java/com/fs/test/StockDeductTest.java

@@ -18,88 +18,88 @@ import java.util.concurrent.*;
 /**
  * 50万高并发库存扣减测试
  */
-@RunWith(SpringRunner.class)
-@SpringBootTest(classes = FsUserAppApplication.class)
-@RequiredArgsConstructor
-@Slf4j
+//@RunWith(SpringRunner.class)
+//@SpringBootTest(classes = FsUserAppApplication.class)
+//@RequiredArgsConstructor
+//@Slf4j
 public class StockDeductTest {
 
-    @Autowired
-    private StockDeductService stockDeductService;
-
-    // 商品ID
-    private static final Long PRODUCT_ID = 1001L;
-    // 初始库存(模拟5万库存,应对50万并发扣减)
-    private static final Integer INIT_STOCK = 5000;
-    // 总请求数(50万)
-    private static final int TOTAL_REQUESTS = 50000;
-
-    /**
-     * 模拟50万高并发库存扣减
-     */
-    @Test
-    public void testHighConcurrencyDeduct() throws InterruptedException, ExecutionException {
-        stockDeductService.initStock(PRODUCT_ID, 1L, INIT_STOCK);
-        // Java 8 ExecutorService 线程池(固定线程池,适配高并发)
-        ExecutorService executorService = createHighConcurrencyPool();
-
-        // 存储所有异步任务结果
-        List<CompletableFuture<Boolean>> futureList = new ArrayList<>();
-
-        // 提交50万请求
-        for (int i = 0; i < TOTAL_REQUESTS; i++) {
-//            futureList.add(stockDeductService.deductStockAsync(PRODUCT_ID, 1L, (long) i));
-        }
-
-        // 等待所有任务完成(Java 8 CompletableFuture 批量处理)
-        CompletableFuture<Void> allFutures = CompletableFuture.allOf(
-                futureList.toArray(new CompletableFuture[0])
-        );
-        allFutures.get();
-
-        // 统计结果
-        long successCount = futureList.stream()
-                .map(future -> {
-                    try {
-                        return future.get();
-                    } catch (Exception e) {
-                        return false;
-                    }
-                })
-                .filter(Boolean::booleanValue)
-                .count();
-
-        // 打印结果
-        System.out.println("======================================");
-        System.out.println("50万高并发库存扣减测试完成");
-        System.out.println("成功扣减次数:" + successCount);
-        System.out.println("失败扣减次数:" + (TOTAL_REQUESTS - successCount));
-        System.out.println("最终剩余库存:" + stockDeductService.redisTemplate.opsForValue().get(RedisConstant.STOCK_KEY_PREFIX + PRODUCT_ID));
-        System.out.println("======================================");
-
-        // 关闭线程池
-        executorService.shutdown();
-        executorService.awaitTermination(1, TimeUnit.MINUTES);
-    }
-
-
-
-    private static ExecutorService createHighConcurrencyPool() {
-        int corePoolSize = Runtime.getRuntime().availableProcessors() * 2; // CPU核心数*2
-        int maximumPoolSize = 200; // 最大线程数,根据服务器配置调整
-        long keepAliveTime = 60L;
-        // 用SynchronousQueue,直接提交任务,避免队列积压
-        BlockingQueue<Runnable> workQueue = new SynchronousQueue<>();
-        // 拒绝策略:丢弃最老的任务,避免OOM
-        RejectedExecutionHandler handler = new ThreadPoolExecutor.DiscardOldestPolicy();
-
-        return new ThreadPoolExecutor(
-                corePoolSize,
-                maximumPoolSize,
-                keepAliveTime,
-                TimeUnit.SECONDS,
-                workQueue,
-                new ThreadPoolExecutor.CallerRunsPolicy() // 兜底:主线程执行,避免任务丢失
-        );
-    }
-}
+//    @Autowired
+//    private StockDeductService stockDeductService;
+//
+//    // 商品ID
+//    private static final Long PRODUCT_ID = 1001L;
+//    // 初始库存(模拟5万库存,应对50万并发扣减)
+//    private static final Integer INIT_STOCK = 5000;
+//    // 总请求数(50万)
+//    private static final int TOTAL_REQUESTS = 50000;
+//
+//    /**
+//     * 模拟50万高并发库存扣减
+//     */
+//    @Test
+//    public void testHighConcurrencyDeduct() throws InterruptedException, ExecutionException {
+//        stockDeductService.initStock(PRODUCT_ID, 1L, INIT_STOCK);
+//        // Java 8 ExecutorService 线程池(固定线程池,适配高并发)
+//        ExecutorService executorService = createHighConcurrencyPool();
+//
+//        // 存储所有异步任务结果
+//        List<CompletableFuture<Boolean>> futureList = new ArrayList<>();
+//
+//        // 提交50万请求
+//        for (int i = 0; i < TOTAL_REQUESTS; i++) {
+////            futureList.add(stockDeductService.deductStockAsync(PRODUCT_ID, 1L, (long) i));
+//        }
+//
+//        // 等待所有任务完成(Java 8 CompletableFuture 批量处理)
+//        CompletableFuture<Void> allFutures = CompletableFuture.allOf(
+//                futureList.toArray(new CompletableFuture[0])
+//        );
+//        allFutures.get();
+//
+//        // 统计结果
+//        long successCount = futureList.stream()
+//                .map(future -> {
+//                    try {
+//                        return future.get();
+//                    } catch (Exception e) {
+//                        return false;
+//                    }
+//                })
+//                .filter(Boolean::booleanValue)
+//                .count();
+//
+//        // 打印结果
+//        System.out.println("======================================");
+//        System.out.println("50万高并发库存扣减测试完成");
+//        System.out.println("成功扣减次数:" + successCount);
+//        System.out.println("失败扣减次数:" + (TOTAL_REQUESTS - successCount));
+//        System.out.println("最终剩余库存:" + stockDeductService.redisTemplate.opsForValue().get(RedisConstant.STOCK_KEY_PREFIX + PRODUCT_ID));
+//        System.out.println("======================================");
+//
+//        // 关闭线程池
+//        executorService.shutdown();
+//        executorService.awaitTermination(1, TimeUnit.MINUTES);
+//    }
+//
+//
+//
+//    private static ExecutorService createHighConcurrencyPool() {
+//        int corePoolSize = Runtime.getRuntime().availableProcessors() * 2; // CPU核心数*2
+//        int maximumPoolSize = 200; // 最大线程数,根据服务器配置调整
+//        long keepAliveTime = 60L;
+//        // 用SynchronousQueue,直接提交任务,避免队列积压
+//        BlockingQueue<Runnable> workQueue = new SynchronousQueue<>();
+//        // 拒绝策略:丢弃最老的任务,避免OOM
+//        RejectedExecutionHandler handler = new ThreadPoolExecutor.DiscardOldestPolicy();
+//
+//        return new ThreadPoolExecutor(
+//                corePoolSize,
+//                maximumPoolSize,
+//                keepAliveTime,
+//                TimeUnit.SECONDS,
+//                workQueue,
+//                new ThreadPoolExecutor.CallerRunsPolicy() // 兜底:主线程执行,避免任务丢失
+//        );
+//    }
+}