自学内容网 自学内容网

java错误记录

一,No qualifying bean of type

Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.asinking.bigdata.sales.dao.ReportProductDayReportHourMapper' available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1717)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1273)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1227)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:640)
... 33 common frames omitted

检查Application配置扫描包是否正确:
在这里插入图片描述

二,@WebFilter无效

启动类添加:

@ServletComponentScan(basePackages = {"com.aking.bigdata.servlet"})

三,下划线转驼峰

在这里插入图片描述

@WebFilter(urlPatterns = {
        "/api/sales/*"
}, filterName = "snakeCaseQueryStringFilter")
@Component
public class SnakeCaseQueryStringConverterFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest,
                         ServletResponse servletResponse,
                         FilterChain filterChain) throws IOException, ServletException {
        filterChain.doFilter(new SnakeCaseQueryStringRequestWrapper((HttpServletRequest) servletRequest), servletResponse);
    }
}
public class SnakeCaseQueryStringRequestWrapper extends HttpServletRequestWrapper {
    private final Enumeration<String> parameterNames;
    private final Map<String, String[]> parameterValues = new HashMap<>();

    public SnakeCaseQueryStringRequestWrapper(HttpServletRequest request) {
        super(request);
        Enumeration<String> parameterNames = super.getParameterNames();
        Vector<String> names = new Vector<>();
        while (parameterNames != null && parameterNames.hasMoreElements()) {
            String name = parameterNames.nextElement();
            String[] values = super.getParameterValues(name);
            String convertName = this.convertName(name);
            names.add(convertName);
            parameterValues.put(convertName, values);
        }
        this.parameterNames = names.elements();
    }

    private String convertName(String snakeCaseName) {
        if (snakeCaseName.endsWith("[]")) {
            snakeCaseName = snakeCaseName.replace("[]", "");
        }

        if (!snakeCaseName.contains("_")) {
            return snakeCaseName;
        }
        StringBuilder stringBuilder = new StringBuilder();
        String[] name = snakeCaseName.split("_");
        for (int i = 0; i < name.length; i++) {
            String s = name[i];
            if (i != 0) {
                s = toUpperFirstChar(s);
            }
            stringBuilder.append(s);
        }
        return stringBuilder.toString();
    }

    private String toUpperFirstChar(String string) {
        char[] charArray = string.toCharArray();
        charArray[0] -= 32;
        return String.valueOf(charArray);
    }

    @Override
    public Enumeration<String> getParameterNames() {
        return this.parameterNames;
    }

    @Override
    public String[] getParameterValues(String name) {
        return this.parameterValues.get(name);
    }
}

启动类添加:

@ServletComponentScan(basePackages = {"com.aking.bigdata.servlet"})

4, mybatis : Error setting non null for parameter #25

Caused by: org.apache.ibatis.type.TypeException: Error setting non null for parameter #25 with JdbcType null .
 Try setting a different JdbcType for this parameter or a different configuration property. 
 Cause: java.sql.SQLException: Parameter index out of range (25 > number of parameters, which is 24).

下面不要加引号
在这里插入图片描述

5,使用devops部署测试环境,新推到git的代码不生效

原因是devops不能及时的拉取代码,不明原因,一般等几分钟后尝试。

6,修改mybatis xml文件后sql报错

sql太长,不容易找错误,原因如下,画蛇添足的给子查询加了一个别名,其实t就已经是别名了,又在里面加了一个别名,下面图示是准确的,错误已经被修正
在这里插入图片描述

7,使用动态数据库连接不能理解数据库

使用基础服务的包动态获取数据库连接信息,但连不上,报密码错误。原因是从数据库获取的密码是加密的, 在本地解密失败,应该是jdk的加解密包的问题,换jdk即正常。

8,idea 设置保存报错: is duplicated in module

如下:
在这里插入图片描述

解决办法:

在这里插入图片描述

9,idea java 设置:idea java: -source 6 中不支持 lambda 表达式

报错如下:

在这里插入图片描述
解决方案:
在这里插入图片描述

10 , 可能是jdk的问题,查一下项目设置中的jdk版本,所有module保持一致

在这里插入图片描述

11,错误: 找不到或无法加载主类 com.atguigu.gulimall.product.GulimallProductApplication

在这里插入图片描述

  • jdk配的不对
  • 多模块,父子模块的依赖关系不对,检查子模块设置的父模块对不对
  • 反正是idea的问题,把父工程的iml文件删掉,然后执行命令:mvn idea:module,等待一段时间,重新生成iml文件,之后一切正常

12,BigDecimal设置保留两位小数不变

BigDecimal是不可变对象,对其操作都会返回一个新对象,要将新对象赋值给原引用才会生效。

BigDecimal amount = amount;
amount.setScale(2); // 次数amount并不会只保留两位小数,setScale会创建一个新对象

BigDecimal newAmount = amount.setScale(2); 
amount = newAmount;

13,spring微服务启动失败

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
2022-11-08 21:39:37.132 ERROR 76244 --- [           main] o.s.b.d.LoggingFailureAnalysisReporter   : 

***************************
APPLICATION FAILED TO START
***************************

Description:

The dependencies of some of the beans in the application context form a cycle:

┌──->──┐
|  com.github.pagehelper.autoconfigure.PageHelperAutoConfiguration
└──<-──┘

报错:循环依赖
解决办法:降低spring版本,提升pagehelper版本
https://blog.csdn.net/weixin_42297563/article/details/125761833

14,线上问题:前端报400

某些用户报400,原因是将一些很大的信息放到header头,被网关限制了
通过链路追踪进行排查。

15,启动微服务报错:程序包com.baomidou.mybatisplus.core.mapper不存在

子模块依赖common模块,子模块启动报错:程序包com.baomidou.mybatisplus.core.mapper不存在,实际上包是存在的。

解决方法:重启idea。

16,微服务启动:servece id illegal name

服务名称不能带下划线

17, Did you forget to include spring-cloud-starter-loadbalancer

https://blog.csdn.net/weixin_73454897/article/details/126588975

18,跨域

前端请求报跨域错误,后台要允许跨域。

@Configuration
public class GulimallCorsConfig {

    @Bean
    public CorsWebFilter getConfig() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedMethod("*");
        corsConfiguration.setAllowCredentials(true);
//        corsConfiguration.addAllowedOrigin("*");
        corsConfiguration.addAllowedOriginPattern("*");

        source.registerCorsConfiguration("/**", corsConfiguration);
        return new CorsWebFilter(source);
    }
}

19,vue的default-expanded-keys不起作用

tree控件上设置的node-key应该是数据的主键,node-key=“catId”,而不是node-ey=“id”

20,SPRING BOOT CONFIGURATION ANNOTATION PROCESSOR NOT CONFIGURED

https://www.cnblogs.com/tszr/p/16158527.html

21,编译时找不到符号在这里插入图片描述

把依赖的common模块install一下

22,mall-product启动失败-循环依赖

Relying upon circular references is discouraged and they are prohibited by default

product模块有service循环依赖。

解决方案:在application.properties中配置如下

spring.main.allow-circular-references=true

23,java: Compilation failed: internal java compiler error

jdk版本问题,在setting–>java compile设置的jdk版本和projectsetting module的版本要一致

在这里插入图片描述

24,Whitelabel Error Page

网关配置未生效,原因是nginx负载均衡时转发请求丢失host头,所以匹配不上路由规则。

在这里插入图片描述
解决:

在这里插入图片描述

25,sr报错:too many filtered rows

原因是有个字段是varchar,长度太小,改为varchar(65535)就可以,还可能是某些字段为空,但是建表设置了字段not null

26,sr修改字段

alter table global_tag_info modify column color varchar(65535) NOT NULL COMMENT ‘999999’;

基本上原来建表时字段有哪些设置,修改时就要代上,比如建表时有default,修改时就要带上default

27,使用redis 报错:OutOfDeirectMemory在这里插入图片描述

  • 原因:redis lettce客户端和netty配合不当,导致netty内存溢出
  • 解决方案

        <!-- 引入redis -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>io.lettuce</groupId>
                    <artifactId>lettuce-core</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>redis.clients</groupId>
            <artifactId>jedis</artifactId>
        </dependency>

28,用多个docker容器启动es实例,不能组成一个集群

启动两个容器后,发现集群只有一个节点。
在这里插入图片描述
排查发现(浏览器输入node2:9200),两个节点的cluster_id不一样:

在这里插入图片描述

解决方案:删除data/nodes下的文件

29,切面不生效x

原因:切入点写的不对。

30,elasticsearch报错

{"type": "server", "timestamp": "2022-12-19T01:46:19,910Z", "level": "ERROR", "component": "o.w.a.d.Monitor", "cluster.name": "elasticsearch-cluster", "node.name": "es-node1", "message": "remote_ext_dict org.apache.http.client.ClientProtocolException error!", "cluster.uuid": "ip1tUJHpSCS8TeIqKNOE4g", "node.id": "v9CPLajyTn68lOOYbR7Ftg"  }

elasticsearch一直有上面报错,原因是ik分词器会去读远程的词库,如果没有配置会报错,如果没有远程词库可以不管。

配置下面的文件 IKAnalyzer.cfg.xml:如果没有远程词库,吧remote_ext_dict配置注释掉

在这里插入图片描述

31,sr集群崩了

有一台ds的master最近频繁挂,原因是这台集群同事部署了yarn,而yarn集群上有一个任务跑了37个小时没跑完,占用了70%的资源,导致其他任务无法提到yarn集群,而ds调不停的产生新的任务,这些任务都创建了driver,但是无法找到worker执行,越来越多的driver占用了大量主机资源,导致ds挂了,ds恢复之后启动了大量积压的其他类型任务,其中一类是sql,大批量的sql执行把数据库搞挂了。

为什么yarn的driver都在一台机器上呢?

32,使用多线程+动态数据源导致数据越权

线程池是共享变量,多个线程使用线程池时,线程池里的线程会从父线程的ThreadLocal获取数据库连接信息,这里的父线程是指创建线程池的线程,而实际上应该从使用线程池的线程的ThreadLocal对象获取数据库连接信息。

这里面有两个点,通过InheritableThreadLocal可以实现子线程读取父线程的私有线程信息。二是线程池的线程不能获取到使用该线程的线程对象。

可以通过将使用线程的信息传递给线程池的方式获取线程信息,但是这样会侵入业务代码。其实就是通过给线程命名的方式传递信息,但是这样也不合适,因为线程池的固定线程知会创建一次,不能动态的命名。

33,使用fastjson将字符串转为json对象报错

原因是调用接口返回的json字符串格式不完全相同,有时是标准的字符串,有时前后带双引号、双引号带转义符号,就是这么奇怪,有的集群能成功执行,有的不能成功执行。

最后,这样搞了下:

try {
            taskLocationList =  (List<TaskLocation>) JSON.parseObject(processTaskDefinitionDTO.getProcessDefinition().getLocations(), new TypeReference<List<TaskLocation>>() {
            });
        } catch (Exception e) {
            taskLocationList = JSON.parseArray(StrUtil.trim(processTaskDefinitionDTO.getProcessDefinition().getLocations(), 0, new Predicate<Character>(){
                @Override
                public boolean test(Character character) {
                    return character.equals(new Character('"'));
                }
            }).replaceAll("\\\\",""), TaskLocation.class);
        }

如果不是标准json字符串,先转义为标准的json字符串。

34, docker安装zookeeper集群启动后自动退出

如题,自动退出后没有日志,大概率是配置文件zoo.cfg myid文件的问题,没找到原因。

最后使用如下命令:

docker run -d --restart always \
--name zookeeper1 \
-p 2181:2181 \
-p 2888:2888 \
-p 3888:3888 \
-e ZOO_MY_ID=1 \
-v /mydata/zookeeper/conf1/zoo.cfg:/conf/zoo.cfg \
-v /mydata/zookeeper/data1:/data \
-v /mydata/zookeeper/datalog1:/datalog \
-v /mydata/zookeeper/logs1:/logs \
zookeeper:3.5.7



docker run -d --restart always \
--name zookeeper2 \
-p 2182:2182 \
-p 2889:2889 \
-p 3889:3889 \
-e ZOO_MY_ID=1 \
-v /mydata/zookeeper/conf2/zoo.cfg:/conf/zoo.cfg \
-v /mydata/zookeeper/data2:/data \
-v /mydata/zookeeper/datalog2:/datalog \
-v /mydata/zookeeper/logs2:/logs \
zookeeper:3.5.7


docker run -d --restart always \
--name zookeeper3 \
-p 2183:2183 \
-p 2890:2890 \
-p 3890:3890 \
-e ZOO_MY_ID=1 \
-v /mydata/zookeeper/conf3/zoo.cfg:/conf/zoo.cfg \
-v /mydata/zookeeper/data3:/data \
-v /mydata/zookeeper/datalog3:/datalog \
-v /mydata/zookeeper/logs3:/logs \
zookeeper:3.5.7

配置文件:

dataDir=/data
#clientPort=2183
dataLogDir=/datalog
tickTime=2000
initLimit=5
syncLimit=2
autopurge.snapRetainCount=3
autopurge.purgeInterval=0
maxClientCnxns=60
#standaloneEnabled=true
#admin.enableServer=true
server.1=192.168.88.161:2888:3888;2181
server.2=192.168.88.161:2889:3889;2182
server.3=localhost:2890:3890;2183

  • 问题一:
    注意server.1,server.2,server.3配置的主机地址:

在这里插入图片描述

问题二,myid的配置
最开始写在myid文件下,不知道为什么不起作用,后来写在命令里面,生效了。

35,No servers available for service: xxxx

不能访问后台访问,网关报错:No servers available for service: xxxx

定位发现是gateway指定了服务发现的命名空间,指定了命名空间之后,只会去这个空间找。

在这里插入图片描述

36,idea 工程全面飘红

删除父工程的iml文件,执行命令 mvn idea:module ,重新生成iml文件即可

37,使用RestTemplate读取string报错

关于 redis 报错 :JsonParseException: Unrecognized token 'xxx': was expecting ('true', 'false' or 'null')

代码如下:return (String) redisTemplate.opsForValue().get(ORDER_KEY + keyId);

https://blog.csdn.net/u013276512/article/details/80816094

在这里插入图片描述

lua脚本得不到想要的结果

todo 这里遇到的麻烦 execute 最后的参数是不定参数,不能用Array.asLists把所有的参数包起来

 boolean ok = redisTemplate.execute(new DefaultRedisScript<>(script, Boolean.class), Arrays.asList(key, key, key), id, expireTime);

38,启动spring项目报错

An attempt was made to call a method that does not exist. The attempt was made from the following location:

原因是有两个重复的jar包,一个在c盘,maven默认的目录,一个在d盘自建maven目录下。我删掉一个之后,即可启动,原因不明。

39,项目中使用swagger,但是访问报错

用错了端口,端口是项目的端口

40,使用RestTemplate写redis乱码

原因是RestTemplate默认的序列化导致的:
在这里插入图片描述

解决办法一:
不使用RestTemplate,使用StringRedisTemplate
在这里插入图片描述

解决办法二:给RedisTemplate设置序列化器

@Configuration
public class RedisTemplateConfig {
    
    @Resource
    private RedisTemplate<String, String> redisTemplate;

    @Bean
    public RedisTemplate<String, String> redisTemplateInit() {
            // 设置序列化 Key 的实例对象
            redisTemplate.setKeySerializer(new StringRedisSerializer());
            // 设置序列化 value 的实例对象
            redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
            return redisTemplate;
    }

    
}

41,docker mysql binlog开启失败

搞了半天,重启docker再配就可以了

42,Communications link failure

The last packet successfully received from the server was 101 milliseconds ago. The last packet sent successfully to the server was 94 milliseconds ago.

在这里插入图片描述

使用mybatis-generator连接mysql,报错如上。

解决方案如下,url加 useSSL=false:
在这里插入图片描述

43,unable to infer base url:swagger不能正常访问

在这里插入图片描述

原因是要加一个swagger的配置类

44,使用spring boot连接docker redis集群,报错timeout

看日志发现lettuce连接的ip不是宿主机的ip,而是容器的ip,显然是连不通的。

但在配置文件配置的就是宿主机的ip啊,lettuce是客户端,怎么会知道宿主机的ip呢。

结合zookeeper的客户端连接server端的过程,猜想lettuce应该是先根据配置连接到redis集群,然后将从集群获得集群地址信息,并且之后根据从集群获得的信息连接集群,集群是在容器的,所以就把容器的ip返回给客户端了。

可以通过在配置文件增加announce-ip和announce-port指定对外提供服务的ip和端口

45,gitingore不生效

已经在缓冲区的不会被ignore,可以尝试将其移除缓冲区

git rm -r --cached .idea

46,高级问题

主线程启动后,使用了守护线程做耗时工作,但主线程很快结束,导致守护线程没有完成工作,没报错确不符合预期的情况。

47编译报错: -source 1.5 中不支持 lambda 表达式 打包报错

在这里插入图片描述
参考

原来 Maven Compiler 插件默认会加 -source 1.5 及 -target 1.5 参数来编译(估计是为了兼容一些比较老的 Linux 服务器操作系统,它们通常只有 JDK 5),而我们的代码里使用了 JDK 7/8 的语法。解决办法在这里:

<plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.2</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>

48,org.elasticsearch.action.ActionRequestValidationException: Validation Failed: 1: type is missing;

在这里插入图片描述

jar包冲突,springboot的会自动引入elastic的包,

在这里插入图片描述

解决办法:一是升级spirngboot的版本,二是在pom指定elasticsearch的版本覆盖父pom的设置

49 ds的sql查询结果传递给下一个task的注意事项

  • sql查询必须是sql任务,不能是subprocess下面添加一个sql任务
  • 接收结果的task必须紧跟sql 任务

50, java.util.ConcurrentModificationException: null

在这里插入图片描述

原因:
在这里插入图片描述
上面代码使用ArrayList.subList,返回的是ArrayList内部的SubList对象,这个对象在创建时modCount被赋予了外部ArrayList对象的modCount。
我后面的代码继续使用了ArrayList.subList,导致ArrayList的modCount继续发生变化,但是之前创建的SubList对象的modCount已经不在变化。
但序列化是会调用SubList的size方法,size方法会调用checkForComodification方法

 private void checkForComodification() {
            if (ArrayList.this.modCount != this.modCount)
                throw new ConcurrentModificationException();
        }

这个方法比较的是外部的ArrayList的modCount和内部SubList的modCount,显然是对不上的,于是报错。

51,LX项目验签一直不通过

调用ERP php接口验签不通过,原因是调用时一个参数在java这边是string,在php是long,两边改成一直即可

52,K8s上的Java Cannot assign requested address问题

https://www.jianshu.com/p/6decdc842218

原因是大量耗时很短的请求建立起的tcp连接状态是TIME_WAIT,这种状态的连接不能复用,而系统不能分配更多的连接数,于是请求端报错,注意这不是服务端的错

查询tcp连接数:

netstat |grep tcp |grep TIME_WAIT | wc -l

sysctl -a grep port_range 查看开放的端口范围

53,客户访问erp不通

tracert -d 域名,看客户的路由,发现转到美国去了

54,使用连接在一起的命令启动java程序产生的幻觉

/bin/sh -c /usr/sbin/crond;/usr/local/java/bin/java -jar -Dspring.config.location=/var/www/sidecar/bootstrap.yml /var/www/sidecar/ak-cloud-sidecar.jar -Xms256m -Xmx256m -XX:+UseG1GC

如上命令,启动一个cron再启动一个java,然后jps可以看见两个java进程

在这里插入图片描述

实际9不是java进程

在这里插入图片描述

55,java程序启动是配置的-Xmx是256m,但是top看到的res是336m

Java程序启动时指定的 -Xmx256m 参数是设置了Java虚拟机(JVM)最大堆内存大小为256MB。但是,应用程序运行过程中可能会使用除了堆内存之外的其他内存资源(比如栈内存、线程池、类加载器等),这些内存资源也会被计算到该进程的 RES(Resident Set Size)中。

因此,即使 Java程序启动时设置了最大堆内存为256MB,该程序在运行时所占用的总物理内存可能会超过这个值,导致top命令显示的RES值大于256MB。

另外,操作系统也会对进程的内存分配进行一定的优化和调整,例如共享库、匿名映射等内存区域会被多个进程共享,同时也存在内核空间占用的内存等因素。这些也可能导致top命令显示的RES与Java程序启动时设置的-Xmx参数不完全一致。

56,pod监控RSS远少于WSS

在这里插入图片描述

黄色的WSS,绿色的是RSS。

这两天的内存监控,内存加到16G后(Pod内存16G,JVM内存8G),已经相当稳定了,但是内存使用率很低。结合之前的监控,居高不下的WSS而不是RSS,说明JVM进程本身使用的内存是不高的,这同我们对代码的分析是一致的。经过上周和少聪、杨聪的讨论分析,结合Pod日志文件的大小(4个小时产生5.7G info日志),我们推测是日志级别低(info)导致日志文件缓存太大。优化方案:提升日志打印级别到error,降低Pod内存到8G,Jvm内存到4G。具体执行:今晚微信推送完成后,执行内存调整,观察到明天下午微信推送前,如果不稳定,仍恢复现方案,如果稳定,保持优化后方案。

最后发现是log_back配置的不合理:
在这里插入图片描述

57, xxl-job传参json报错

syntax error, expect {, actual string, pos 0, fastjson-version 1.2.83

原因是json最后多了一个空格:{"companyId":["90136259866976256"],"updateTime":"2023-10-51 19:56:19"}

把最后一个空格去掉即可

58,mybatis的mapper文件里面的test,未生效 是怎么回事

listingUids是long类型,所以要写作

59,tomcat启动异常:NoClassDefFoundError: org/springframework/context/support/ClassPathXmlApplicationContext

在这里插入图片描述


原文地址:https://blog.csdn.net/epitomizelu/article/details/125256159

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!