Spring AOP实现日志功能时java.lang.OutOfMemoryError

  • 需求:当程序调用每个service方法时记录客户端ip、调用时间、调用的方法全限定名和传入的参数
    Spring AOP实现日志功能时java.lang.OutOfMemoryError

  • 做法:step01定义一个记录日志的切面Spring AOP实现日志功能时java.lang.OutOfMemoryError
    step02把切面配置到每个service方法的尾部Spring AOP实现日志功能时java.lang.OutOfMemoryError

重点

运行后console一直跳动,注释掉systemlogService.write(systemlog);就正常了,说明问题出在这行代码
控制台:Spring AOP实现日志功能时java.lang.OutOfMemoryErrorSpring AOP实现日志功能时java.lang.OutOfMemoryError
凭借经验,出现了死循环
tomcat log:Spring AOP实现日志功能时java.lang.OutOfMemoryError
可以确定程序中出现了死循环
由于注释掉systemlogService.write(systemlog);就正常了
说明:systemlogService.write(systemlog);导致了死循环

原因

配置切面时给`systemlogService也配置了切面,导致记录日志时也要为记录日志记录日志,导致死循环

解决

因为为所有的service方法配置了记录日志的切面,所以记录日志不能放在service中:将systemlogService.write(systemlog);改为systemlogMapper.insert(systemlog);

对于java.lang.OutOfMemoryError: Java heap space有的同学的解决方法是更改heap的大小,一般程序正常运行,heap的默认大小够用