一次StackOverflowError事故—–参数类型问题

背景:公司需要做一个小程序,从把服务器数据库里面的数据拷贝到本地

技术:spring-boot, XXL-RPC, JPA

问题 : 客户端查询数据,调用RPC服务,一直报错 StackOverflowError:null,

问题重现:

数据表test

CREATE TABLE test (
  "rid" int(11) NOT NULL AUTO_INCREMENT,
  "name" varchar(45) DEFAULT NULL,
  "age" int(11) DEFAULT NULL,
  "create_time" datetime DEFAULT NULL,
  PRIMARY KEY ("rid")
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Test实体类

import java.io.Serializable;
import java.time.LocalDateTime;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@Entity
@Table(name = "test")
public class TestEntity implements Serializable{

    /**
     *
     */
    private static final long serialVersionUID = -7189192698006290220L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "rid")
    private Integer id;

    private String name;

    private Integer age;

    private LocalDateTime createTime;

}

Repository ,使用的是JPA,具体关于JPARepository的知识,自己补习吧

import org.springframework.data.jpa.repository.JpaRepository;

public interface TestRepository extends JpaRepository{

}

Service服务,直接与数据库交互的

public interface TestService {
    TestEntity save(TestEntity entity);
}
@Service
public class TestServiceImpl implements TestService{

    @Resource
    private TestRepository testRepository;

    @Override
    public TestEntity save(TestEntity entity) {
        return testRepository.save(entity);
    }

}

服务端开放的RPC服务

public interface WqqTestRpcService {

    TestEntity save(TestEntity entity);
}
import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.wqq.test.TestEntity;
import com.wqq.test.WqqTestRpcService;
import com.wqq.test.TestService;
import com.xxl.rpc.remoting.provider.annotation.XxlRpcService;
@XxlRpcService
@Service
public class WqqTestRpcServiceImpl implements WqqTestRpcService{

    @Resource
    private TestService testService;

    @Override
    public TestEntity save(TestEntity entity) {
        return testService.save(entity);
    }

}

客户端使用

@XxlRpcReference
    private WqqTestRpcService wqqTestRpcService;

    public void save() {
        TestEntity entity = new TestEntity();
        entity.setAge(23);
        entity.setName("我是谁");
        entity.setId(3);
        entity.setCreateTime(LocalDateTime.now());
        wqqTestRpcService.save(entity);

    }

习惯写完之后测试

测试TestService, WqqTestRpcService

@ContextConfiguration(classes = TestServerApplication.class)
@RunWith(SpringRunner.class)
@SpringBootTest
//@Transactional
//@Rollback
public class Test{

    @Resource
    private TestService testService;

    @Resource
    private WqqTestRpcService wqqTestRpcService;

    @Test
    public void test1() {
        TestEntity entity = new TestEntity();
        entity.setAge(23);
        entity.setName("测试1");
        entity.setId(1);
        entity.setCreateTime(LocalDateTime.now());
        wqqTestRpcService.save(entity);
    }
    @Test
    public void test2() {
        TestEntity entity = new TestEntity();
        entity.setAge(23);
        entity.setName("测试2");
        entity.setId(2);
        entity.setCreateTime(LocalDateTime.now());
        testService.save(entity);
    }

}

结果:数据库插入两条数据,说明方法是没有问题的

一次StackOverflowError事故-----参数类型问题

正式运行。开始报错 Caused by: java.lang.StackOverflowError: null

百思不得其解,查了网上很多基本都是说死循环或者是无线递归,可是我只是调用一个保存的方法,哪里来的死循环还有递归,还有说改变配置,但是我测试方法是行得通的,直觉告诉我不会说是改变配置(真的直觉,但是可能别人是有这样解决的,反正我没有试),后来又进行了很多次测试,结果完全想不到是参数类型的问题,把TestEntity的参数类型与 LocalDateTime改成 Date就可以,具体为啥这样,还没结论,只是知道这么不再报错,但是是不是真的最好的结局办法,依然不知, 希望有大神可以解惑吧

Original: https://www.cnblogs.com/Cassie-wang/p/11169628.html
Author: 背着核的桃子
Title: 一次StackOverflowError事故—–参数类型问题

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/589661/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • mac 文本处理命令分享

    2 awk awk ‘{pattern + action}’ {filenames} awk是在每行处理文本的时候,默认按照空格隔离每一个域,对每一个域做处理。也可以直接通过在aw…

    Java 2023年6月7日
    0103
  • Docker内运行的nginx除了80端口其他端口都无法访问

    请检查nginx容器是否只开启了80端口映射!!! 请检查nginx容器是否只开启了80端口映射!!! 请检查nginx容器是否只开启了80端口映射!!! 环境: Docker: …

    Java 2023年6月5日
    0113
  • MySQL中desc命令的两个用法

    1.desc查看表结构的详细信息 sql;gutter:true; DESC table_name;</p> <p>PS:此处DESC是describe的缩…

    Java 2023年6月5日
    080
  • linux 命令行出现-bash-4.2$的解决办法

    linux 命令行出现-bash-4.2$的解决办法 Linux服务器新建立的用户在登录时显示”-bash-4.2$”,而不是”user@主机名…

    Java 2023年6月9日
    0145
  • 一文总结高并发大数据量下MySQL开发规范【军规】

    在互联网公司中,MySQL是使用最多的数据库,那么在并发量大、数据量大的互联网业务中,如果高效的使用MySQL才能保证服务的稳定呢?根据本人多年运维管理经验的总结,梳理了一些核心的…

    Java 2023年6月16日
    0114
  • 动力节点-王妈妈Springboot教程(八)打包war

    *视频观看地址 8.1 打包war 1.创建了一个jsp应用 2.修改pom.xml 1)指定打包后的文件名称 2)指定jsp编译目录 3)执行打包是war 4)主启动类继承Spr…

    Java 2023年6月7日
    0101
  • 面试题:请写出线程同步相关的方法,以银行账号存储款为例

    一.该面试题主要考察多线程中的synchronized或者Lock的使用 * 线程同步 :使用同步方法,实现线程同步 * 同步synchronized方法的对象监视锁为this,当…

    Java 2023年5月30日
    096
  • 使用 Azure 静态 Web 应用服务免费部署 Hexo 博客

    一.前言 最近在折腾 Hexo 博客,试了一下 Azure 的静态 Web 应用服务,发现特别适合静态文档类型的网站,而且具有 免费额度,支持绑定域名。本文只是以 Hexo 作为示…

    Java 2023年6月8日
    0144
  • Android自定义View学习(1)——基础知识介绍

    原文:Android自定义View学习(1)——基础知识介绍 – Stars-One的杂货小窝 准备学习自定义View,介绍一下先了解了下相关的前置基础知识,特此总结 …

    Java 2023年6月13日
    078
  • shiro认证- SpringBoot(20)

    除Spring Security安全框架外,应用非常广泛的就是Apache的强大又灵活的开源安全框架 Shiro,在国内使用量远远超过Spring Security。它能够用于身份…

    Java 2023年6月13日
    084
  • 使用 Proxychains 代理联网

    前言 Proxychains 是 Linux 系统中一款简单好用的代理工具,可以指定特定命令走代理进行网络请求,适用于比较特殊的网络环境。最新版本为 proxychains4 安装…

    Java 2023年6月7日
    096
  • Java基础面试题(1)

    个人总结,仅自己学习用。愿与大家一起分享!如有错误请指正。 一、String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的? …

    Java 2023年5月29日
    0167
  • JDK成长记8:HashMap的兄弟姐妹们

    LinkedHashMap的源码底层原理 LinkedHashMap继承自HashMap,但是它的底层增加了一个链表来维护 插入或者访问顺序,使得LinkedHashMap变动有顺…

    Java 2023年6月5日
    0104
  • 质量问题不是不爆,时候未到

    没有质量,哪来效率,谈什么成本; 最近大半年,团队以极其曲折的方式,将一个支离破碎的应用从重构的边缘给拉了回来,最终项目回到了正常迭代的节奏中; 年初的时候,运营系统相关人员离职,…

    Java 2023年6月15日
    070
  • 关于ThreadLocal最直白的解释

    ThreadLocal 底层原理如下:实线是强引用,虚线是弱引用Thread 持有 ThreadLocal 对象的引用,ThreadLocalMap 是 Thread 的成员变量,…

    Java 2023年6月9日
    089
  • MCU软件最佳实践——独立按键

    短小精悍,适用于有rtos和无rtos场合的按键驱动程序 引子 在进行mcu驱动和应用开发时,经常会遇到独立按键驱动的开发,独立按键似乎是每一个嵌入式工程师的入门必修课。笔者翻阅了…

    Java 2023年6月6日
    0127
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球