问题记录-Java后端

问题记录

目录

  • 问题记录
    • 1.多数据源使用事务注意事项?
    • 2.mybatis执行MySQL的存储过程?
    • 3.springBoot加载不到nacos配置中心的配置问题
    • 4.服务器产生大量close_wait情况

1.多数据源使用事务注意事项?

  • 问题:在springBoot项目中多表处理数据时使用@Transaction注解处理事务会导致连不上指定的库,访问失败。
    在这里插入图片描述

  • 原因:配置动态多数据源导致事务处理不知道走哪一个TransactionManager

  • 解决方案:
    1.在配置多数据源文件中,统一在事务管理器上也指定。
    在这里插入图片描述
    2.找到使用事务的地方,在Transactional注解内加入 transactionManager = “xxxTransactionManager” ,指向对应的事务就可以了。
    在这里插入图片描述

2.mybatis执行MySQL的存储过程?

  • 问题:在执行存储过程使用stateMentType = ”STATEMENT“ 参数时报错
    在这里插入图片描述
  • 原因:
    STATEMENT是非预编译的直接执行sql,不能使用#{},使用${}。
    PREPARED:预处理,参数,进行预编译,获取数据:#—–PreparedStatement:默认
    CALLABLE:执行存储过程———CallableStatement
  • 解决方案:更改statementType类型,或者改变动态入参方式。如果没有参数形式用哪种类型都可以。

3.springBoot加载不到nacos配置中心的配置问题

  • 问题:首先报错信息打印是can not find primary datasource,
    cloud版本:2021.0.5.0 对应 nacos:2.2.0以上 版本太低会出现兼容问题。
    在这里插入图片描述
  • 原因:一开始分析找不到主数据源是因为没有设置primary:master,设置后还是出现问题。再分析可能没加载到配置文件,接下来通过nacos加载一步步分析。
    • 首先在NacosPropertySourceBuilder下的loadNacosData方法中打上断点发现this.configService.getConfig返回的data为空, 侧面证明了确实没有读取到nacos中的配置信息
      在这里插入图片描述
    • 然后再进去getConfig一步步看哪个地方获取失败,进入NacosConfigService的getConfigInner方法里面,就是具体的拉取配置的实现,nacos首先是通过LocalConfigInfoProcessor.getFailover的方法获取本地的配置, 当本地配置返回空时才会去获取nacos客户端的配置,而this.worker.getServerConfig这个方法,就是进行获取远端的配置信息, 通过断点发现response的返回也是空的,那么我继续下进入getServerConfig中
      在这里插入图片描述
    • 进入到queryConfig方法时发现了问题,通过ConfigQueryRequest.build方法生成的ConfigQueryRequest请求, 在返回时竟然返回ErrorCode:300, message 为 config data not exist, 这就是表示我传递三个参数, dataId, group, tenant 出现了问题
      在这里插入图片描述
    • 再回去nacos中反复检查发现命名空间有多个,bootstarp配置文件并没有指定所以加入namespace标签解决问题。
      在这里插入图片描述

4.服务器产生大量close_wait情况

  • 问题:运营人员突然找我说系统进不去了,我看项目正常并没有错误日志打印,没有其它日志打印,只有xxl-job还在执行有日志打印。第一反应项目不正常出现假死情况。
  • 原因:
    ①利用jstack查看线程,再用top查看系统负载和cpu占用情况一切都正常。
    ②排除了业务代码的问题,需要跳出业务代码去查问题,既然没有请求,那就先从网络开始查起,使用netstat -aonp命令查看发现大量close_wait产生,查阅相关资料,因为linux中一切皆为文件,一直产生导致tcp队列溢出。 查看tcp队列是否溢出命令:netstat -s | egrep “listen|LISTEN”
    ③查看tcp队列当前情况:ss -lnt 会出现两个值Recv-Q和Send-Q
    Recv-Q代表当前全连接队列的大小,也就是三次握手完成,目前在全连接队列中等待被应用程序accept的socket个数。
    Send-Q代表全连接队列的最大值,应用程序可以在创建ServerSocket的时候指定,tomcat有默认大小,这时Recv-Q会远远大于Send-Q。
  • 解决方案:
    设置超时时间
    server:port: 8988tomcat:uri-encoding: UTF-8connection-timeout: 20000   # 默认值20s 设置http超时时间(即keep-alive超时时间),没有任何活动则tomcat关闭连接protocol-header: HTTP/1.1servlet:session:timeout: 120s   # 会话超时时间,默认为30min  与客户端http断开
    

    另一种情况:近期项目在做信创改造时切换数据源,连接MySQL失败,导致项目产生大量close_wait。原因是同事开发时没有考虑连接报错时数据库怎么关闭连接导致产生大量close_wait,这种代码层面考虑不全不做过多概述,用try-catch-finally包住并在finally下关闭连接。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/479239.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java:aqs实现自定义锁

aqs采用模板方式设计模式,需要重写方法 package com.company.aqs;import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.AbstractQueuedSynchronizer; import java.util.concurrent.locks.Condition; import java.util.concurrent.locks.Lock;…

day11_JS初识_语法

day11_JS初识_语法 今日学习目标 : 入门HarmonyOS生态中 , ArkTS最基础的语法 JavaScript , 今天最主要的学习内容了解和掌握JavaScript的基础语法 , 并灵活的再后面开发过程进行使用 今日学习目标 什么是JavaScript JavaScript组成 JavaScript执行环境 JavaScript代码的书…

[C++]:IO流

1. IO 流 1.1 流的概念 在C中,存在一种被称为“流”的概念,它描述的是信息流动的过程,具体来说就是信息从外部输入设备(比如常见的键盘)传输到计算机内部(像内存区域),以及信息从内…

基于Kubernetes编排部署EFK日志收集系统

基于K8S编排部署EFK日志收集系统 案例分析 1. 规划节点 节点规划,见表1。 表1 节点规划 IP主机名k8s版本信息192.168.100.3masterv1.25.2192.168.100.4nodev1.25.2 2. 基础准备 Kubernete环境已安装完成,将提供的软件包efk-img.tar.gz上传至master…

Kubernetes 还是 SpringCloud?

前些年,随着微服务的概念提出以及落地,不断有很多的公司都加入到了这场技术革新中,现在可谓是人人都在做和说微服务。 提到微服务,Java栈内,就不得不提SpringBoot、SpringCloud、Dubbo。 近几年,随着Cloud …

ChatGPT如何辅助academic writing?

今天想和大家分享一篇来自《Nature》杂志的文章《Three ways ChatGPT helps me in my academic writing》,如果您的日常涉及到学术论文的写作(writing)、编辑(editing)或者审稿( peer review)&a…

101.【C语言】数据结构之二叉树的堆实现(顺序结构) 2

目录 1.堆删除函数HeapPop 一个常见的错误想法:挪动删除 正确方法 设计堆顶删除函数HeapPop 解析向下调整函数AdjustDown 核心思想 向下调整最多次数 向下调整的前提 代码实现 提问 细节分析 2.测试堆删除函数 运行结果 3.引申问题 运行结果 4.练习 分析 代码…

【机器学习chp8】统计学习理论

前言 本文遗留问题:无 目录 前言 一、结构风险最小化 1、最小化风险决策 2、分类与回归中的最小化风险决策 3、统计学习的基本目标 4、无免费午餐定理 5、Hoeffding不等式 (1)背景及定义 (2)Hoeffding不等式…

Springboot启动报错’javax.management.MBeanServer’ that could not be found.

报错信息如下图: 解决办法: 1.在你的.yml文件或者.properties文件里加上如下配置: properties: management.endpoints.jmx.enabledfalseyml: management:endpoints:jmx:enabled: false2.如果以上方法行不通,在springboot启动类…

英语知识网站:Spring Boot技术构建

6系统测试 6.1概念和意义 测试的定义:程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为: 目的:发现程序的错误; 任务:通过在计算机上执行程序,暴露程序中潜在的错误。 另一个…

英伟达推出了全新的小型语言模型家族——Hymba 1.5B

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

spring boot2.7集成OpenFeign 3.1.7

1.Feign Feign是一个声明式web服务客户端。它使编写web服务客户端更容易。要使用Feign,请创建一个接口并对其进行注释。它具有可插入注释支持,包括Feign注释和JAX-RS注释。Feign还支持可插拔编码器和解码器。Spring Cloud增加了对Spring MVC注释的支持&…

Jmeter中的前置处理器

5)前置处理器 1--JSR223 PreProcessor 功能特点 自定义数据处理:使用脚本语言处理请求数据,实现高度定制化的数据处理和生成。动态数据生成:在请求发送前生成动态数据,如随机数、时间戳等。变量设置:设置…

git(Linux)

1.git 三板斧 基本准备工作: 把远端仓库拉拉取到本地了 .git --> 本地仓库 git在提交的时候,只会提交变化的部分 就可以在当前目录下新增代码了 test.c 并没有被仓库管理起来 怎么添加? 1.1 git add test.c 也不算完全添加到仓库里面&…

学习Java的日子 Day56 数据库连接池,Druid连接池

Day56 1.数据库连接池 理解:池就是容器,容器中存放了多个连接对象 使用原因: 1.优化创建和销毁连接的时间(在项目启动时创建连接池,项目销毁时关闭连接池) 2.提高连接对象的复用率 3.有效控制项目中连接的…

Jmeter测试工具的安装和使用,mac版本,jmeter版本5.2.1

Jmeter测试工具的安装和使用JSON格式请求 一、安装1、安装jdk包和设置java环境2、去官网下载Jmeter3、解压后,打开mac终端,进入apache-jmeter的bin文件开启jmeter 二、使用jmeter1、添加线程2、添加HTTP请求3、配置请求的协议、IP地址、端口号、请求方法…

Envoy 源码解析(一):Envoy 整体架构、Envoy 的初始化

本文基于 Envoy 1.31.0 版本进行源码学习 1、Envoy 整体架构 1)、核心组件 Envoy 包含以下四个核心组件: Listener(监听器):定义了 Envoy 如何处理入站请求。一旦连接建立,请求会被传递给一组过滤器进行处…

【VUE3】VUE组合式(响应式)API常见语法

pnpm常用命令 pnpm i //pnpm安装VUE3常见语法汇总 ref() //const count ref(0) //count.value(访问值,包括对象要加.value) //任何类型的值,包括深层嵌套的对象或则JS内置数据结构 await nextTick() //要等待 DOM 更新完成后…

CGAL CGAL::Polygon_mesh_processing::self_intersections解析

CGAL::Polygon_mesh_processing::self_intersections 是用于检测多边形网格(Polygon Mesh)中的自相交的函数。自相交是指网格中的某些面(例如三角形)与同一网格中的其他面交叉的情况。这种情况通常是不期望的,因为它会…

⭐ Unity 资源管理解决方案:Addressable_ Demo演示

一、使用Addressable插件的好处: 1.自动管理依赖关系 2.方便资源卸载 3.自带整合好的资源管理界面 4.支持远程资源加载和热更新 二、使用步骤 安装组件 1.创建资源分组 2.将资源加入资源组 3.打包资源 4.加载资源 三种方式可以加载 using System.Collections…