各位上午/下午/晚上好呀! 今天在写bug的时候发现一个这样的问题: AOP抛出的异常竟然没有被@RestControllerAdvice注解修饰的异常统一处理类处理。   需求是这样子滴:对某些加了自定义注解的方法进行切面处理,通过条件判断是否有权限执行该方法。 伪代码大概长这个样子: @Around("pointcut()")publicObjectaroundScheduledMethod(ProceedingJoinPointjoinPoint)throwsThrowable{if(!isAccess()){thrownewPException();}joinPoint....

  ssbY8JrwAR4j   2024年02月19日   273   0   0 Java

哈喽,各位早上/中午/晚上好呀! JDK21出了也有一段时间了,有的小伙伴也按捺不住开始将项目升级到JDK21了吧。 既然升级,大概多多少少都会遇到“找不到符号”的问题,英文原文是“cannotfindsymbol”。 如何解决呢? 以下方式不止针对于升级到JDK21,其它版本的升级配置方法相同。 其实Idea关于Java版本配置的地方还是蛮多的: 1.修改Idea文件->项目结构->项目设置中项目和模块的JavaSDK版本。应用->确定   2.修改设置->构建、执行、部署->编译器->Java编译器中的项目字节码版本和模块字节码版本 &n...

  ssbY8JrwAR4j   2024年02月19日   110   0   0 Java

@Transactional属于是Spring的常用事务处理注解了,最近在开发时偶然发现这个东西竟然不是100%生效的。 问题重现: 测试一个批处理方法,方法上加了@Transactional后执行,因为加了事务处理注解,没怎么关注SQL执行顺序(反正对事务来说都是原子性的),debug过程发现MongoDB连接有问题,有关Mongo的操作抛出了异常,因为数据库的某个字段是批处理的触发条件,并且在批处理过程中会更新这个字段。重新执行发现数据库(Postgresql)的数据被update了,没有触发。嗯,确实之前没关注这个注解会有不生效的问题,开始处理: 首先为了方便测试批处理任务(定时调度的)...

  ssbY8JrwAR4j   2023年11月01日   64   0   0 Java

问题复现: 单测中@PostConstruct修饰的方法被多次执行 原因: @PostConstruct在Spring中常用于在构造函数后初始化对象,执行顺序如下: 构造方法->成员变量注入->PostConstruct方法 单测中由于某些原因,只希望初始化执行一次(当然一般是使用@BeforeClass或者@BeforeAll),不过我这里因为某些不可描述的原因,不希望使用静态方法进行初始化,因此想到了PostConstruct注解,单测执行后发现,初始化执行了多次,就是PostConstruct方法执行了多次。那首先怀疑,是不是所有单测方法运行的时候,都会构造一个单测对象呢?这...

  ssbY8JrwAR4j   2023年11月01日   65   0   0 Java

Http常用请求方法对比 请求方法 常见参数传递方式 是否幂等 说明 API举例 GET URL,注意:Http协议对URL长度没有限制,所谓的限制是浏览器和处理服务器的 幂等 用于查询 批量查询:/shapes单个查询:/shapes/1 POST RequestBody 不幂等 一般用于创建 创建资源:/shapes PUT RequestBody 幂等 一般用于修改,也可以用于创建,客户端提供更新或创建完整信息因此对于修改,由于PUT是幂等的,尽量使用PUT而不是POST创建时需指定创建的Id,保证创建操作的幂等性,否则应该使用POST 创建资源:/shapes/1...

  ssbY8JrwAR4j   2023年11月01日   55   0   0 Java

首先一句话: @Configuration修饰的类会被Cglib动态代理,@Component不会。 详细: Cglib动态代理生成当前对象的子类Class,并对方法拦截,多次调用@Bean方法时直接从BeanFactory之中获取,得到同一个对象。 实际是因为 注解下有个proxyBeanMethods属性,默认值为true,即通过Cglib动态代理生成一个代理子类,对原始方法进行拦截,由BeanFactory处理;如果手动设为false,直接调用@Bean方法和@Autowired拿到的就不是同一个对象了。当然,你直接调用@Bean方法跟直接调用其他方法也没有区别了,相当于你直接调用的时候...

  ssbY8JrwAR4j   2023年11月01日   76   0   0 Java

@Configuration  同@Component,将标注的类作为一个组件,区别是会使用Cglib动态代理,因此使用该注解的类不能是final的 与@Component的区别可见:Configuration和@Component的区别 Cglib动态代理和JDK动态代理区别可见:Cglib动态代理和JDK动态代理的对比 属性: value,一般用不到,会将该值传递给@Component proxyBeanMethods,是否代理@Bean方法,详见 Configuration和@Component的区别 @Component 将标注的类作为一个组件使用,单例 属性: &...

  ssbY8JrwAR4j   2023年11月01日   58   0   0 Java

  默认注入类型 多个同类型Bean 注入失败 依赖 使用目标(@Target) @AutoWired 通过type 默认首先安装属性名称进行注入结合@Qualifier注解(value属性)设置注入的Bean或通过@Primary注解优先选择某个Bean,优先级低于@Qualifier 可以通过required设置为false忽略 Spring CONSTRUCTOR,METHOD,PARAMETER,FIELD,ANNOTATION_TYPE @Resource 通过bean名称 通过设置name属性指定Bean,不识别@Primary 报错且不可忽略 javax ...

  ssbY8JrwAR4j   2023年11月01日   41   0   0 Java

问题复现: 明明在拦截器里配置了跨域,就是不生效,使用PostMan等后端调试工具调试,均正常,Response中有Access-Control-Allow-Origin:,这个Header,但是前端一直反馈,通过浏览器js代码fetch报跨域问题。如图:    嗯,,,看看浏览器请求:    确实在报CORS错误 问题分析: 看到这个浏览器请求对http比较了解的同学可能已经猜到大概了,对于非Simple请求,浏览器会先发送一次OPTIONS请求,坑就在这里,如果我们用了自定义的header,就不是Simple请求,意味着会发送一次OPTIONS,...

  ssbY8JrwAR4j   2023年11月01日   56   0   0 Java

程序计数器 用于标识线程执行到了字节码文件(class文件)的哪一行,当执行native方法时,值为undefined,各个线程私有 Java虚拟机栈 每个线程独有,每个方法执行时会创建一个栈帧,用于存储局部变量表等方法信息,即方法的执行会伴随着一个栈帧的入栈出栈。 栈帧的组成     如果线程请求的栈深度大于虚拟机允许的最大深度,将抛出StackoverflowError异常 栈最大深度由栈内存大小和局部变量表大小确定,即栈大小固定,局部变量表越大,栈深度越小,栈大小可通过-Xss参数设置,默认为1m 如果栈动态扩展失败,会抛出OutOfMemoryError异常,不过...

  ssbY8JrwAR4j   2023年11月01日   49   0   0 Java

JDK6及之前字符串常量池是放在永久代的,这里不讨论,JDK7之后将字符串常量池迁移到了JVM的堆中,注意删除永久代更换为元空间是JDK8哈。 测试代码1如下: @Test publicvoidtest01(){ Stringstr2=newStringBuilder("12").append("34").toString(); Stringintern=str2.intern(); Stringstr1="1234"; System.out.println(str2intern); System.out.println(str1intern); } 输出结果: true true 测...

  ssbY8JrwAR4j   2023年11月01日   41   0   0 Java

分析: 当引入AOP相关依赖后 <dependency> <groupId>org.springframework</groupId> <artifactId>spring-aspects</artifactId> </dependency> Spring启动时会加载AopAutoConfiguration 这个类中通过@EnableAspectJAutoProxy注解开启AOP,代码如下  点进去看看:      可以看到该注解是通过proxyTargetClass参数来控...

  ssbY8JrwAR4j   2023年11月01日   43   0   0 Java

之前调试只发现有的方法执行完return语句后再执行finally,但是没有细究 最近debug代码的时候发现,不同返回类型的方法,return和finally执行顺序竟然不一样 先看返回类型为void的执行顺序:    继续执行:    继续:    发现执行顺序是: try中代码->finally代码->try中的return,是先执行finally,再执行return 再看返回类型为int类型的执行顺序:    继续执行:    发现竟然直接到了return,继续: ...

  ssbY8JrwAR4j   2023年11月01日   56   0   0 Java

//测试代码 publicstaticvoidmain(String[]args){ Integera=1; Integerb=2; Integerc=3; Integerd=3; Integere=128; Integerf=128; Longg=3l; System.out.println(cd); System.out.println(ef); System.out.println(c(a+b)); System.out.println(c.equals(a+b)); System.out.println(ga+b); System.out.println(g.equals(a+b))...

  ssbY8JrwAR4j   2023年11月01日   70   0   0 Java

【Jmeter】基础介绍-详细 接上文,继续介绍Jmeter,本文关注点为如何解决上文中提到的第一个问题,即: 需要实现Request1的返回作为Request2的RequestBody或Header Jmeter支持后置处理器,即对http请求(或其他取样器)的返回值进行提取并赋值给变量。 本例中从Request1的ResponseBody中提取token,并作为Request2的header输入。 创建后置处理器,此处使用Json提取器用于解析Json返回值:  Http请求的返回值:  Json提取器参数:  参数没什么需要特别说明的,注意如果提取...

  ssbY8JrwAR4j   2023年11月01日   100   0   0 Java

先看 【Jmeter】基础介绍-详细 【Jmeter】Request1输出作为Request2输入-后置处理器 继续聊提出的第二个问题,即   2.需要按比例分配API请求并发,以模拟真实的API压力场景 做压测的时候,一般的需求都是多个API同时压,不然也看不出真正的tps是多少啊。 比如虽然接口a的需求并发不高,500个用户才请求一次,但是特别耗性能,导致其他接口tps下降严重,所以压测的时候可以将比例调的很小,但是不能忽略它,只测并发请求高的接口 说会主题,如何按比例分配压测并发量呢?使用Jmeter可以有两种实现方式 先说第一种,通过线程组的方式控制: 线程组1配置:  线...

  ssbY8JrwAR4j   2023年11月01日   75   0   0 Java

引用传递和值传递,从上学那会儿就开始强调的概念,不管你是计算机相关专业还是自学Java,一定听过这么一句话: 方法调用参数如果是对象,那就是引用传递,如果是基本数据类型,就是值传递。 比如:function(Objecto)就是引用传递,function(inti)就是值传递。这两个概念似乎很好理解,我们只需要记住对象和基本数据类型的区别就行了。但是,真的是这样吗? 有一段代码如下: publicstaticvoidmain(String[]args){ inti=0; System.out.println(i); change(i); System.out.println(i); } p...

  ssbY8JrwAR4j   2023年11月01日   37   0   0 Java

你的Java服务是如何监控的呢?  1.Null:监控?什么监控?我一个写代码的服务挂了跟我有什么关系?  2.命令行:服务挂了?内存泄漏?jstatjmapjcmd,还好不是我写的 3.撸代码:Java采集JVM/服务器资源信息->Prometheus->Grafana,请允许我对业务代码稍作修改。 今天,给大家介绍一个对源码0入侵的Java服务监控方式,SkyWalkingAgent,只需要启动Java程序的时候加几个参数,就能对Java服务进行可视化监控啦 首次接触SkyWalking是学习SpringCloud的时候,使用SkyWalking进行链...

  ssbY8JrwAR4j   2023年11月01日   113   0   0 Java

大家好,我是mep。今天一起来探讨一下Redis缓存的问题,SpringBoot如何集成Redis网上文章很多,基本都是介绍如何配置redisTemplate,如何调用,本文就不过多介绍了。这次我们研究的是:Redis的事务。 首先抛出一个问题,Redis支持事务吗?     答案肯定是支持,不然也不需要我们在这里探讨了。 然后你拿到关键词"Redis事务"去搜索引擎搜索一下,得到了这样的答案: Redis支持事务,But!Redis的事务不保证原子性,事务不会回滚。例如:我在Redis中提交了一个事务,包含3条命令,其中第2条命令报错了,并不会导致第一条命令的回滚,也不...

  ssbY8JrwAR4j   2023年11月01日   92   0   0 Java

最近做压测时使用到Jmeter,为什么用它,之前也做过部分压测,不是很系统,使用的是ApacheBench,虽然效率高,但是功能比较简单,不太适合本次压测场景,另外Jmeter能更好的利用压测机的多核性能,ab使用单核,如果需要使用多核需要手动启动多个压测进程。 本次压测场景主要需求点: 需要实现Request1的返回作为Request2的RequestBody或Header 需要按比例分配API请求并发,以模拟真实的API压力场景 对于以上需求,Jmeter均提供了较好的处理方案,后面会一一介绍。 本文首先介绍基本使用方式: 首先,打开JmeterGUI:  注意: 这里输出...

  ssbY8JrwAR4j   2023年11月01日   117   0   0 软件测试
关注 更多

空空如也 ~ ~

粉丝 更多

空空如也 ~ ~