- 博客(55)
- 收藏
- 关注
原创 @Lazy注解的原理
1.ContextAnnotationAutowireCandidateResolver是主要逻辑类2.当@Lazy与@Autowired或者@Resource合用时,依赖创建的是代理对象(目标对象是TargetSource),在执行时,执行的是代理对象,在invoke(Object proxy,Method method,Object[] args)中执行targetSource.getTarget()时才去beanFactory中依赖查找bean.3.@Autowired与@Lazy一起
2023-10-27 15:20:23
250
原创 @Qualifier注解的原理
自定义的bean上加了指定名称@Qualifier,再在@Autowired上同样加了指定相同名字的@Qualifier时,则会一起导入(bean名称刚好与@Qualifier中指定的名称相同的,也会一起导入)private List<xxxInterface> list;//list中包含A,B,D对象,不包含C对象。
2023-10-24 17:54:55
201
原创 @Value注解的原理
ConfigFileApplicationListener(最新版本是ConfigDataEnvironmentPostProcessor)是主要的实现类,它是在spring.factories中,在启动时加载进来的。环境变量可以设置为eim_tts_middlePlatform_url或者eim-tts-middlePlatform-url或者eim.tts.middlePlatform.url,也不区分大小写。如原变量@Value("${eim.tts.middlePlatform.url}")
2023-10-24 17:32:42
218
原创 @Autowired注解的原理
在bean的实例化过程中,执行doCreateBean方法中会调用MergedBeanDefinitionPostProcessor的postProcessMergedBeanDefinition方法,会填充RootBeanDefinition。在bean的实例化过程中,执行populateBean方法中会调用InstantiationAwareBeanPostProcessor的postProcessProperties方法。@Autowired注释的构造方法,requried=true的只能有一个。
2023-10-24 10:51:19
105
原创 @Resource注解的原理
在bean的实例化过程中,执行doCreateBean方法中会调用MergedBeanDefinitionPostProcessor的postProcessMergedBeanDefinition方法,会填充RootBeanDefinition。不存在则按类型查找,调用ListableBeanFactory的getBeanNamesForType()方法,存在多个则要去找@Primary标记的对象,否则报错NoUniqueBeanDefinitionException。
2023-10-24 10:16:19
149
原创 springboot中@Async的使用
原因是:AsyncAnnotationBeanPostProcessor没有实现接口SmartInstantiationAwareBeanPostProcessor中的getEarlyBeanReference(Object bean,String beanName)的方法,使得循环依赖早期暴露的对象不是代理对象,与最终的生成的代理对象不一致。注:由于执行的是代理对象,CGLIB创建的代理对象实际上是目标对象的子类,不能重写private方法,所以方法不能是private,否则报下面的错误。
2023-10-20 14:23:45
192
原创 springboot中@scheduled的使用
在postProcessAfterInitialization(Object bean,String beanName)方法中找到所有bean中有注解为@Scheduled的方法,组装成task,添加到调度线程池中。如果都没有找到,则用Executors.newSingleThreadScheduledExecutor()生成的调度线程池,此线程池核心数为1,线程名前辍默认的是scheduling-。如果找到多个这样的bean则要按固定的bean名字(taskScheduler)去找这个调度线程池。
2023-10-20 10:35:14
195
原创 springMVC中统一异常处理@ControllerAdvice
1.在DispatcherServlet中初始化HandlerExceptionResolver2.controller执行完成后执行processDispatchResult(processedRequest,response,mappedHandler,mv,dispatchException),有异常则处理异常3.ExcepitonHandlerExceptionResolver中执行方法doResolveHandlerMethodException4.ExceptionHan
2023-10-18 16:56:27
466
原创 httpClient
如果服务端关闭连接,发送FIN包,在这个FIN包发送但是还未到达客户端期间,客户端如果继续复用这个TCP连接发送HTTP请求报文的话,服务端会因为在四次挥手期间不接收报文而发送RST报文给客户端,客户端收到RST报文就会提示NoHttpResponseException。2.设置一个定时线程,定时清理上述闲置连接,定时时间设置为keep alive timeout的一半以保证超时前回收。httpGet,httpPost也可以设置上面的三个属性,设置了后,则httpClient设置的此三个属性不生效。
2023-10-11 16:28:13
216
原创 AQS的理解
当parkNanos结束后,将自己添加到同步队列中,然后尝试从同步队列中获取锁,所以awaitNanos(long nanosTimeout)执行完后也不是马上执行后面的逻辑,可能同步队列中还有排在前面的thread节点。执行await()方法时,当前线程添加到condition队列中,同时唤醒同步队列中一个线程,自身也进行park(当在同步队列中且unpark后会尝试获取锁)NonFairSync 正常也是从同步队列中,从头到尾一个个的取线程节点,但新加的线程允许抢占式的获取,不排队。
2023-10-11 15:16:56
48
原创 PriorityQueue
2.每次添加元素(实现comparable接口)时,调整堆顶是最小的元素,取元素是取的堆顶元素,取完后再调整堆顶元素是最小值。1.数组存放的堆数据,堆顶数据最小,左右节点比父节点大。
2023-10-11 14:18:38
39
原创 tomcat中ThreadPoolExecutor
3.已提交未完成的任务数大于当前线程数,线程不够用,直接创建线程,不会直接进入阻塞队列(通过TaskQueue中重写offer(Runnable)方法返回false实现)tomcat中的ThreadPoolExecutor通过继承java中ThreadPoolExecutor来实现定制化的。2.创建线程池时就已经预初始化了核心线程。1.设置了阻塞队列的长度。
2023-10-11 14:08:44
93
原创 ReservedThreadExecutor
jetty中为实现EatWhatYouKill的线程策略,目的是同一个线程侦测I/O事件和处理I/O事件,充分利用了CPU缓存,并减少了线程切换的开销。_capacity指定了最大执行EatWhatYouKill策略的线程数。
2023-10-11 13:50:25
96
原创 jetty中的QueuedThreadPool线程池
(5)QueuedThreadPool中非核心线程的回收是按idleTimeout间隔一个个回收的(即串行),而ThreadPoolExecutor中非核心线程是按每个线程poll(keepAliveTime,TimeUnit.NANOSECONDS)来回收的(即并行)(3)QueuedThreadPool中当空闲线程不够时,直接创建新的线程,而ThreadPoolExecutor要等到阻塞队列满的时候才创建新的线程。(2) 每新建一个线程,启用的线程数加1,空闲的线程数加1。
2023-10-11 10:40:02
326
原创 ScheduledThreadPoolExecutor
执行完一个任务后再把这个任务添加到DelayedWorkQueue中,任务执行用的是FutureTask,任务执行过程中如果有异常抛出则会影响新任务的添加,所以我们在处理业务逻辑时要自己try catch异常。2.用scheduledFutureTask当一个task,它继承FutureTask,使用方法runAndReset()返回的boolean值来判断是否添加新的任务到阻塞队列中。schedule方法只执行一次,其它的两个周期性执行,根据private final long period;
2023-10-11 09:53:15
74
原创 ThreadPoolExecutor
默认情况下,当空闲时,核心线程保持alive,非核心线程会超时回收掉,超时时间用参数keepAliveTime控制。参考tomcat中的线程池ThreadPoolExecutor,重写execute(Runnable command)方法,在里面增加数据,重写afterExecute(Runnable r,Throwable t),在里面减少数量。
2023-10-09 17:14:28
79
原创 DelayQueue
2.peak()(只查出来,不删除)出首元素时,判断getDelay()是否小于等于0,只有小于等于0时才取出,否则等待剩余的时间awaitNanos(long nanosTimeout)1.底层是一个PriorityQueue队列(数组,堆结构),每次添加元素(实现Comparable接口)时,调整堆顶是最小的元素,取元素是取的堆顶元素,取完后再调整堆顶元素是最小值。4.非公平锁,所以是竞争成为leader。
2023-10-09 14:21:25
51
原创 FutureTask
runAndReset方法执行成功后不会设置返回结果,也不会通知waitNode队列中的线程unpark,会返回执行成功与否的状态,用于重复多次执行的场景。(在ScheduledThreadPoolExecutor中使用)run方法执行成功后会设置返回的结果及通知waitNode队列中的线程unpark.
2023-10-09 14:06:01
45
原创 jetty中springMVC的contoller返回DeferredResult的理解
1.servlet会请求两次一个是public void handle(HttpChannel channel);另一个是public void handleAsync(HttpChannel channel)第一次是在httpConnection中通过onFillable()方法调用HttpChannel的handle()方法(正常请求都是通过此执行的)第二次在httpchannelState中的dispatch方法(添加httpChannel任务到线程澉中,会再次调用handle()方法
2021-09-03 18:14:24
203
原创 Thread ThreadLocal InheritableThreadLocal
ThreadLocal解决的是变量在不同线程间的隔离性,在同一线程中的共享.InheritableThreadLocal 可以在子线程中取得父线程继承下来的值,继承的值可以再修改1.Thread 中有两个成员变量,分别是如下,其数据结构是一致的 /* ThreadLocal values pertaining to this thread. This map is maintained * by the ThreadLocal class. */ ThreadLoca......
2021-04-02 13:04:57
179
转载 activeMQ
如果要修改控制台的登录用户名密码,可以在conf/jetty-realm.properties文件中修改 1、activemq.xml新增账号密码(broker标签下添加) <simpleAuthenticationPlugin> <users> <authenticationUser username="...
2018-07-17 17:20:08
278
转载 linux中网络
vi /etc/resolv.conf 设置域名解析服务器hostname可以查看主机名vi /etc/sysconfig/network 修改此文件可以修改主机名,修改完成后要重启服务器。一台服务器能ping通,但用telnet访问一个开启了的端口时不通,可能原因是开启了防火墙,关闭掉就行在线安装telnetyum install telent -y telnet ip port 的返回值来确...
2018-07-05 10:47:59
161
转载 Centos忘记了root密码的处理方法
虚拟机安装了Centos,忘记了root密码,如何处理(1)重新启动Centos,在启动过程中,长按“ESC”键,进入GNU GRUB界面 (2)选择要进入的系统,按“E”键(在启动之前编辑命令)。 (3)选择第二项操作系统的内核“kernel”,按"E"键(在引导顺序编辑选定的命令)(4)在 “rhgb quiet”后面间隔,输入“1”或者“single”,按Enter键保存。(向内核传...
2018-07-05 10:37:46
323
原创 docker
docker的安装1.确保yum是最新的yum update2.添加 yum 仓库tee /etc/yum.repos.d/docker.repo <<-'EOF'[dockerrepo]name=Docker Repositorybaseurl=https://yum.dockerproject.org/repo/main/centos/$releasever...
2018-07-03 16:34:31
189
1
转载 国外著名java论坛
www.sun.com-不用多说吧。www.apache.org-apache很多开源项目,无论是拿来用还是看源代码都很不错http://java.sun.com/docs/books/tutorial/来自SUN公司的官方Java指南 - 对于了解几乎所有的java技术特性非常有帮助. http://www.javablogs.com互联网上最活跃的一个Java...
2018-05-09 09:45:46
2033
转载 nfs
服务端配置 1. 安装nfs-utils和rpcbind复制代码代码如下:yum install nfs-utils rpcbind2.设置开机启动服务复制代码代码如下:chkconfig nfs on chkconfig rpcbind on3.启动相关服务复制代码代码如下:service rpcbind start service nfs start4.创建共享目录复制代码...
2018-05-06 17:43:54
199
转载 jenkins
1.jenkins的war包直接启动nohup java -jar jenkins.war --httpPort=10090 &1.首先要在jenkins中添加svn的用户名和密码:打开“Credentials2.装maven插件3.配置maven路径4.默认的安装路径为/root/.jenkinshttps://blog.youkuaiyun.com/kefengwang/article/detai...
2018-04-28 09:17:43
152
转载 tomcat中session共享
在tomcat的context.xml中添加如下配置 host="127.0.0.1" port="6379" password="ermacharity@13714001947#189" database="1"
2017-02-24 11:52:13
233
转载 linux中nfs
在服务器端中编辑/etc/exports文件,添加如下内容:/usr/local/tomcat/apache-tomcat_city/webapps/upload/ 10.26.42.209(rw,no_root_squash)/usr/local/tomcat/apache-tomcat_city/webapps/upload/ 10.27.193.22(rw,no_root_squ
2017-02-15 15:04:17
234
转载 linux中代理服务器软件squid
服务端配置1. 安装 squidyum -y install squidchkconfig --level 35 squid on 使用默认的/etc/squid/squid.conf 的配置文件即可,默认端口是3128,默认只允许内网IP代理访问上网2. 初始化和启动 squid –zservice squid
2016-09-23 13:36:51
1317
原创 java中常用单词
mutable 易变的,不定的:例如;org.springframework.core.env.MutablePropertySources priority 优先,例如:org.springframework.core.PriorityOrdered PostProcessor ,后处理器(名词) resolver,分解器,解析器(名词) customize,...
2016-08-09 09:48:28
2423
转载 spring
org.springframework.core.io.support.PropertiesLoaderUtilsspring中加载属性配制文件的工具类,也可以加载xml文件本质上还是调用jdk的Properties与XMLUtils类
2016-07-30 11:51:45
493
转载 FTP
配置系统用户能够通过ftp登录,然后禁用该用户直接登录系统,并且修改用户主目录usermod -d /home/posadm/ ftpadmin
2016-02-23 10:22:58
848
转载 iptables与firewall
-A:指定链名 -p:指定协议类型 -d:指定目标地址 --dport:指定目标端口(destination port 目的端口) --sport:指定源端口(source port 源端口) -j:指定动作类型 只修改/etc/sysconfig/iptables 使其生效的办法是修改好后先service iptables res
2015-11-19 15:22:31
367
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人