
java
文章平均质量分 66
若鱼1919
简历修改、模拟面试、面试辅导
展开
-
ThreadLocal使用完成不清理为啥会造成内存泄漏?
ThreadLocal使用完成不清理为啥会造成内存泄漏?原创 2023-02-08 14:14:37 · 1685 阅读 · 2 评论 -
nginx配置跨域失败及解决办法
nginx配置跨域失败及解决办法原创 2022-08-31 18:10:44 · 6323 阅读 · 0 评论 -
skywalking的那些配置参数
storage.elasticsearch.bulkActions,storage.elasticsearch.flushInterval,storage.elasticsearch.concurrentRequests解释原创 2022-07-18 15:56:50 · 1881 阅读 · 0 评论 -
skywalking集成nacos动态配置
skywalking集成nacos动态配置原创 2022-06-29 18:01:05 · 3134 阅读 · 0 评论 -
SpringBoot统一返回值与actuator的矛盾
SpringBoot统一返回值带来的问题原创 2022-06-24 09:25:15 · 908 阅读 · 0 评论 -
skywalking agent源码编译与docker镜像制作
skywalking agent源码编译与docker镜像制作原创 2022-06-01 12:27:45 · 1430 阅读 · 3 评论 -
Logback自定义Pattern参数解析
需求要在打印的日志中都带上登录的用户名。最笨的办法:每一次日志打印的时候,手动添加上用户名可行的办法:拦截请求,把用户名写入到MDC,然后在Pattern中通过%X{username}进行打印装X的办法:拦截请求,把用户名写入到ThreadLocal,然后在Pattern中通过%u这中自定义的Pattern进行打印自定义Patternappend的配置<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"原创 2022-05-27 15:29:16 · 2659 阅读 · 0 评论 -
spring-data-jpa使用与原理解析
spring-data-jpa使用入门spring-data-jpa的使用非常简单:1.添加依赖2.添加EntityManager相关配置3.定义实体Bean,映射数据库表和字段4.编写业务Repository看个最简单的demo1.pom.xml<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.data</gr原创 2022-05-08 15:09:24 · 1217 阅读 · 0 评论 -
无用的知识点又增加了-关于Spring Bean的生命周期
问:请描述下Spring Bean的生命周期答:简单的说就3步:1、创建BeanDefination阶段2、创建Bean阶段3、销毁Bean阶段创建BeanDefination阶段1.BeanFactory通过xml、注解配置类创建BeanDefination2.通过BeanFactoryPostProcessor.postProcessBeanFactory()对BeanFination进行修改创建Bean阶段1.反射调用构造函数,创建初始化的Bean对象2.注入@Autowired原创 2022-04-30 10:23:37 · 1139 阅读 · 0 评论 -
无用的知识点又增加了-关于FactoryBean
问:如果在Spring中定义了一个FactoryBean,那么容器中会存在几个Bean?一个还是两个?写一段代码测试下:public class FactoryBeanTest { public static void main(String[] args) { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(); ctx.registerBean(Us原创 2022-04-30 09:34:22 · 341 阅读 · 0 评论 -
那些年,我们写过的低级BUG,警钟长鸣
又一个低级的生产BUGif(newDto.getStoreName().equals(oldDto.getStoreName()) && newDto.getStoreCode().equals(oldDto.getStoreCode()) && newDto.getGoodsName().equals(oldDto.getGoodsName()) && newDto.getGoodsSpec().equals(oldDto.getGood原创 2022-02-23 12:44:26 · 812 阅读 · 0 评论 -
JDBC执行批量UPDATE的几个坑
关于allowMultiQueries上代码:@Test public void testUpdateBatch2Jdbc()throws Exception{ Connection conn = ds.getConnection(); PreparedStatement pstmt = conn.prepareStatement( "update users set gender = 0 where id = 1;" +原创 2021-12-10 16:14:56 · 3693 阅读 · 0 评论 -
Mybatis一级缓存与二级缓存
一级缓存作用范围是SqlSession,当创建SqlSession的时候,会创建Executor,父类BaseExecutor中有一个localCache,查询结果就是缓存在这个localCache中。如果SqlSession执行了增删改就会刷新缓存二级缓存作用范围是namespace,当框架启动的时候会去解析每一个mapper.xml,一个mapper.xml有一个与之对应的namespace,一个xml中会有多个MappedStatement,每个查询的MappedStatement都会关联一个原创 2021-09-10 20:56:42 · 846 阅读 · 0 评论 -
3个线程依次交替打印ABC
方法1.wait-notifypublic static void main(String[] args) throws Exception{ Object lock1 = new Object(); Object lock2 = new Object(); Object lock3 = new Object(); Thread t1 = new Thread(()->{ while(true){ try{原创 2021-07-14 11:34:52 · 326 阅读 · 0 评论 -
mysql的bigint(20)里面的20代表什么含义?
参考:Types in MySQL: BigInt(20) vs Int(20)See http://dev.mysql.com/doc/refman/8.0/en/numeric-types.htmlINT is a four-byte signed integer.BIGINT is an eight-byte signed integer.They each accept no more and no fewer values than can be stored in their resp原创 2021-03-01 17:16:15 · 981 阅读 · 0 评论 -
又见Druid:sql injection violation, multi-statement not allow
之前写过一篇关于这个问题的文章:https://blog.youkuaiyun.com/goldenfish1919/article/details/50600053最近在一个项目中又遇到这个问题了,道理在上篇文章中已经说得很清楚了,说一下这回遇到的问题。首先,项目是用jndi来连接的数据库,因此数据库的配置不是配置在应用程序里面的,比如${tomcat_home}/conf/context.xml:<Context> <WatchedResource>WEB-INF/web.xm原创 2020-12-01 09:30:21 · 1280 阅读 · 0 评论 -
那些年,我们写过的低级BUG,警钟长鸣
看下这段代码有哪些问题:public static MultiPriceInfo getMultiPriceInfo(List<MultiPriceInfo> multiPriceInfos, String code) { if(CollectionUtils.isEmpty(multiPriceInfos)){ return null; } for(MultiPriceInfo priceInfo : multiPric原创 2020-10-29 14:43:10 · 847 阅读 · 1 评论 -
Apollo配置中心客户端源码解析
配置中心在现在的分布式系统可以说是一个必不可少的核心组件了,国内使用最广泛的配置中心应该是携程开发的Apollo。Apollo的思想还是挺简单的,简单地说,服务端利用Eureka做高可用,配置信息存到数据库,客户端调用服务端的接口,拉取最新的配置,如果有变化,就更新客户端的配置。服务端提供了可视化的图形界面去修改配置,保存到数据库。我们今天先来看下客户端部分是如何来实现的。客户端的主要功能就是调用服务端接口,获取最新的配置,然后更新配置。由于apollo-client的代码还是比较复杂了,因此在它的基础上原创 2020-10-15 12:24:25 · 796 阅读 · 0 评论 -
spring-cloud-starter-openfeign源码解析
上文中我们讲了spring-cloud-starter-openfeign的使用,比起原生的openfeign的api好用了很多,本文我们就来看下它的源码。看下spring-cloud-openfeign-core:这里面对openfeign做了自动配置,其中FeignRibbonClientAutoConfiguration和FeignLoadBalancerAutoConfiguration显然是做负载均衡的,FeignHalAutoConfiguration是用来处理application/ha原创 2020-09-22 19:48:08 · 1170 阅读 · 0 评论 -
如何获取当前线程中所有的ThreadLocal?
public class ThreadLocalUtil { public static Map<ThreadLocal, Object> getThreadLocalMap(){ Map<ThreadLocal, Object> threadLocals = new HashMap<>(); Thread thread = Thread.currentThread(); try{ Fiel原创 2020-09-16 16:37:58 · 7345 阅读 · 0 评论 -
spring-cloud-starter-openfeign使用详解
首先还是把demo跑起来:添加依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId></dependency>添加注解@SpringBootApplication@EnableFeignClients//添加这个注解public c原创 2020-09-15 09:16:10 · 19643 阅读 · 1 评论 -
搞了一天存储过程,现在又说历史数据不用处理了。。。
十几年不写oracle的存储过程了,花了一整天,一行一行的调试出来的,说不用就不用了,记一下语法吧,万一以后还能用得上:--先创建个类型CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (4000);-- 创建个字符串拆分函数 CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2) RETURN ty_str_sp原创 2020-09-11 14:14:33 · 266 阅读 · 0 评论 -
OpenFeign源码解析
feign的核心功能就是通过接口去访问网络资源,猜一下里面也是用动态代理来实现的,就跟Mybatis用接口去访问数据库一样,今天我们就来看下源码的处理,核心就一个包:<dependency> <groupId>io.github.openfeign</groupId> <artifactId>feign-core</artifactId></dependency>先来看个demo://feign接口public in原创 2020-09-08 09:13:56 · 996 阅读 · 0 评论 -
OpenFeign使用详解
openfeign是一个java的http客户端,用来简化http调用,先看一个最简单的demo:这是服务端接口:@RestControllerpublic class DemoController { @GetMapping("/hello") public String hello(){ return "hello"; }}openfeign是如何来调用这个接口的呢?public interface Demo { @RequestLine("原创 2020-08-31 21:00:51 · 8816 阅读 · 0 评论 -
spring-cloud-starter-netflix-hystrix使用详解
前面文中我们学习了hystrix的原生使用(hystrix入门-原生API使用)和注解使用(hystrix进阶-注解hystrix-javanica使用),本文来看下hystrix在spring-boot中的使用。首先还是先看个最简单的demo第一步:添加依赖<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netf原创 2020-08-24 09:16:41 · 15364 阅读 · 0 评论 -
SpringBoot 2.2和2.3异常处理的一个小变化
先看个有意思的现象:@RestControllerpublic class DemoController { @GetMapping("/hello") public String hello(){ throw new RuntimeException("服务端异常,请稍后再试!"); }}在springboot2.2.0的时候,浏览器访问http://localhost:8080/hello,输出结果如下:换成springboot2.3.0的时候,输出原创 2020-08-18 08:57:07 · 1868 阅读 · 1 评论 -
hystrix进阶-注解hystrix-javanica使用
前一篇我们讲了hystrix原生api的使用,用起来还是比较复杂的,如果想让一个方法支持fallback还得去继承HystrixCommand,跟业务完全耦合到一起,对业务的侵入性太大了,显然不利于hystrix的使用,因此hystrix-javanica出现了,可以让应用以注解的方式更方便的来使用hystrix。先看个demo第一步:引入依赖<dependencies> <dependency> <groupId>com.netflix.hystrix&l原创 2020-08-16 15:12:26 · 719 阅读 · 2 评论 -
hystrix入门-原生API使用
熟悉spring-cloud的同学都知道,hystrix是用来做服务熔断降级用的,在Springloud中使用hystrix很简单,后面的文章中我们再演示,今天首先来看下原生的hystrix api是如何来使用的。hystrix入门demo<!--添加下这个依赖--><dependency> <groupId>com.netflix.hystrix</groupId> <artifactId>hystrix-core</原创 2020-08-10 09:17:58 · 649 阅读 · 0 评论 -
spring-boot-starter-logging源码解析
本文以2.2.0为例来说明下,首先还是打开jar包,不出所料,空空如也:然后打开autoconfigure的jar包,找到spring.factories,搜索logging:打开ConditionEvaluationReportLoggingListener,这里也没有配置使用哪一个log框架啊,没办法,只好看一下它的依赖:依赖了logback,同时还依赖了jul-to-slf4j和log4j-to-slf4j,我们知道logback是springboot默认使用的日志框架,那么后面这两个ja原创 2020-08-05 10:02:15 · 1970 阅读 · 3 评论 -
spring-boot-starter-data-redis源码解析与使用实战
我们以spring-boot-starter-data-redis-2.1.7为例,starter本身没有包含任何代码,只是引入了spring-data-redis的依赖,因此肯定是在spring-boot-autoconfigure中加了自动配置:我们就看下这几个配置类:其中RedisAutoConfiguration里面就配置了我们常用的RedisTemplate,RedisRepositoriesAutoConfiguration这里面是实现了spring-data规范的一些配置,RedisRe原创 2020-07-26 12:04:24 · 6723 阅读 · 0 评论 -
SpringBoot加载web项目流程源码解析
上一篇文章中我们写了一个极简版的SpringBoot,基本完成了Controller的映射和访问,真实的SpringBoot是如何来做的?我们以2.3.0.RELEASE版本的SpringBoot为例来看下它是如何一步一步创建内嵌的tomcat并且注册DispatcherServlet的,它是否跟上篇文章中讲的一样,也是利用了Servlet3.0的ServletContainerInitializer和WebApplicationInitializer呢? 友情提示:公众号的排版对源码的文章非常不友好,建原创 2020-07-20 09:36:29 · 434 阅读 · 0 评论 -
三分钟手写极简版SpringBoot-重复造个轮子
前一篇文章中(SpringMVC不使用web.xml如何配置及源码解析)我们讲了SpringMVC如何使用JavaConfiguration的方式进行配置,这个不就跟SpringBoot里面创建web项目是一样一样的吗?今天我们就来模拟一个极简版的SpringBoot。(1)添加依赖。<dependencies> <dependency> <groupId>org.springframework</groupId>原创 2020-07-14 09:22:50 · 288 阅读 · 0 评论 -
SpringMVC不使用web.xml如何配置及源码解析
SpringMVC在很久之前就不推荐使用web.xml作为项目的配置文件了,更推荐使用java configuration的方式,因为web.xml配置实在是太繁琐了,今天我们就来演示下如何使用更简单的java configuration的方式来配置SpringMVC,总共分3步,非常简单。第一步:添加入口类WebApplicationInitializer。首先需要在项目中添加一个WebApplicationInitializer的实现类,一般是继承AbstractAnnotationConfigDi原创 2020-07-06 09:20:19 · 1800 阅读 · 0 评论 -
Java中到底能不能在运行时获取方法的参数名?why?how?
最近一个项目有一个需求,需要去获取方法的参数名,我们知道,java的源文件首先是编译成class文件,jvm在运行时是执行的class文件的字节码, 那么,如果想获取到方法的参数名,首先要保证class文件中得有参数的名字才可以,那么我们就来看一下,默认的javac编译出来的class文件中是否是带有参数名的://这是一个非常简单的类:package com.github.xjs;public class CompilerDemo { public static void main(Strin原创 2020-07-04 13:17:39 · 476 阅读 · 1 评论 -
Spring IOC的@Autowired、@Inject、@Resource的区别
使用过Spring的同学相信对这几个注解都已经很熟悉了,这几个都是用来做依赖注入的,我们挨个的来看一下。@Autowired@Autowired可以加在构造函数、方法、方法参数、成员变量、注解上,从Spring4.3开始,如果bean只有一个构造函数,或者只有一个primary/default的构造函数,那么构造函数上的@Autowired可以不加,否则还是要在某个构造函数上明确的加上@Autowired。源码如下:@Deprecated@Retention(RetentionPolicy.RUN原创 2020-06-27 09:43:57 · 302 阅读 · 0 评论 -
spring aop的@target与@within的真正区别到底是什么?
文档里面是这么说的:@target: Limits matching to join points (the execution of methods when using Spring AOP) where the class of the executing object has an annotation of the given type.@within: Limits matching to join points within types that have the given annot原创 2020-06-19 21:15:14 · 5980 阅读 · 1 评论 -
Spring的@Bean只能放在@Configuration里面吗?
首先来看几个问题:1.@Bean方法只能定义在@Configuration里面吗?2.@Bean方法定义在@Configuration里面和定义在@Component里面有啥区别?3.@Bean方法可以是private static的吗?4.@Bean方法啥时候必须得定义成static的?先说一下答案:只要是@Component注解修饰的类里面都可以定义@Bean,并且都可以注册到Spring容器里面。其实不仅仅是@Component,只要是被@Component修饰的注解同样原创 2020-06-13 18:00:01 · 1192 阅读 · 0 评论 -
Spring的Event事件处理使用详解
Spring中使用事件非常简单,只需要以下的几个步骤:1.定义事件,继承ApplicationEvent2.定义监听,要么实现ApplicationListener接口,要么在方法上添加@EventListener注解3.发布事件,调用ApplicationContext.publishEvent()或者ApplicationEventPublisher.publishEvent();下面我们就用一个例子来说下具体的用法:比如用户注册成功以后,系统要给用户发送一封邮件,同时还要给用户发放优惠券,原创 2020-06-08 09:59:31 · 7508 阅读 · 1 评论 -
Spring的@EnableScheduling与@Scheduled使用详解
首先来看下EnableScheduling的javadoc:@EnableScheduling启用了Spring的任务调度功能,这跟在xml中配置task:* 是一样的,它可以加在@Configuration上:@Configuration@EnableSchedulingpublic class AppConfig {// various @Bean definitions}下面的代码可以在容器中的bean上查找到@Scheduled注解,比如:package com.myco.task原创 2020-05-30 13:52:42 · 5027 阅读 · 0 评论 -
Spring的@EnableAsync与@Async使用详解
@EnableAsync的javadoc@EnableAsync可以让Spring启用异步方法执行,就跟在xml中配置task:* 效果是一样的。它可以跟@Configuration结合,让整个Spring环境启用基于注解的异步处理:@Configuration@EnableAsyncpublic class AppConfig {}比如下面的MyAsyncBean是一个用户自定义的Bean,它里面的方法上添加了@Async注解或者EJB 3.1 的@javax.ejb.Asynchronou原创 2020-05-23 14:31:49 · 8092 阅读 · 1 评论