- 博客(452)
- 资源 (9)
- 问答 (1)
- 收藏
- 关注
原创 Spring cloud配置中心动态更新的原理
Spring cloud下的微服务为了能动态感知配置中心的变化,多生成了一个ApplicationContext,由于ApplicationContext聚合了Environment,所有同时也多生成了一个Environment。这个新的ApplicationContext专门用于和配置中心交互,contextId为bootstrap。
2024-09-06 09:58:48 256
原创 mysql Deadlock found when trying to get lock; try restarting transaction
数据库隔离级别:read-committed表a有唯一索引。
2024-09-05 19:27:06 318
原创 Spring Boot-加载配置文件ConfigDataEnvironmentPostProcessor
org.springframework.boot.context.config.ConfigDataEnvironmentPostProcessor是 Spring Boot 中的一个关键组件,它负责处理配置数据(config data),并将其应用于 Spring 应用上下文中。下面我们详细解读这个类的产生背景、作用和工作原理。
2024-08-20 20:19:03 260
原创 为什么ClassLoader里会有getResources方法
实际上,`ClassLoader` 的 `getResource` 方法和类信息的保存没有直接关系。`getResource` 方法的主要目的是定位和获取资源文件,而非类文件。资源文件可以是配置文件、图片、音频或其他任何非代码文件。`getResource` 方法能够定位资源是因为它会根据给定的资源名称在类路径(Classpath)中进行搜索。类路径是指定了类和资源存放位置的一个环境变量或配置选项,它可以包括文件系统的目录、JAR文件等。
2024-07-31 17:35:36 360
原创 spring中设计概念
接口的设计哲学是通过一种灵活、解耦的方式来增强组件的功能,同时保持代码的清晰性和可维护性。接口的回调方法通常在bean初始化阶段调用,确保bean在完全初始化之前就已经获得了必要的上下文信息。bean作为观察者等待Spring容器的通知,而Spring容器作为主题负责通知bean有关的上下文信息。接口允许Spring管理的bean在初始化过程中获得对Spring应用上下文或容器的引用,以及其它相关的信息。的引用,组件可以在运行时被Spring容器动态地填充必要的信息,这使得组件更加灵活和可测试。
2024-07-04 20:06:58 501
原创 Apache HttpClient总览
Apache HttpClient 4.x 系列• HttpClient 4.0(发布于2008年左右):这是一个重要的里程碑,标志着HttpClient从Jakarta Commons项目转移到Apache HttpComponents项目。4.0版进行了大量的重构,引入了新的连接管理模型(基于HttpCore),支持了HTTP/1.1的持久连接、连接池以及更灵活的配置选项。
2024-06-12 19:47:51 1168
原创 Spring RestTemplate高性能配置
这里没有涉及任何连接方面的配置,直接使用,需要看源码才知道RestTemplate是如何进行网络连接的。根据经验,我们知道,发起网络通信,通常是有需要有网络连接工具类的,我们熟知的有:1、JDK自带的java.net.URLConnection3、其他一些http工具类RestTemplate也不例外。这里的createRequest()就调用到父类HttpAccessor了。RestTemplate的有关继承关系如下,上面是父类,下面是子类RestTemplate把发送请求的功能封装到。
2024-03-20 13:47:27 759
原创 PageHelper原理
所以,不要给list重新赋值,否则最后PageInfo无法从Page中拿到分页值。mybatis提供插件功能,PageHelper使用这个插件机制。
2024-02-01 21:15:38 515
原创 Spring原理提前理解
如果一个bean有多个构造方法,Spring默认使用无参构造方法,此时如果没有无参构造方法,就会报错,此时可以使用@Autowired修饰构造方法用以告知Spring使用确定的构造方法。6、cglib通过继承方式生成代理对象,代理对象里会插入一个原生对象target,所以代理对象里会看到原生对象里的属性,且属性值都为Null,d、创建对象时,一定会伴随构造方法的调用,这是JAVA的强制要求,如果创建的是子类对象,一定会有构造方法链式调用的过程。4、Spring在实例化bean时,必须调用构造方法。
2024-01-17 21:05:59 412
原创 一次生产问题:MySQL连接耗尽和死锁
1、线程池要隔离,特别是业务逻辑中异步处理任务较多时,要考虑异步是否需要快速处理完2、表的修改要在需要修改的时候再修改,不要无脑修改,不要怕麻烦多查询一次。
2023-12-29 19:47:57 741
原创 六边形架构
总的来说,Alistair Cockburn是一位备受尊敬的软件工程师和架构师,他的贡献和影响力对软件开发领域的发展产生了深远的影响。Alistair Cockburn是一位软件开发领域的重要人物,他通过自己的研究、著作和实践,推动了敏捷开发方法的发展和普及,对提升软件开发团队的效率和质量产生了积极的影响。除了他的学术和行业成就,Alistair Cockburn还以其独特的幽默感和迷人的演讲风格而闻名于同行。他的经验和见解使他成为了软件开发领域的权威人物,受到了业界的广泛赞誉和尊重。
2023-11-17 20:47:07 867
原创 架构问题自查
识别和理解业务需求,可从业务全局角度,对需求进行建模设计可在指导下阅读和理解需求文档、参与需求评审会并可理解需求内容(参与需求分析/评审的相关邮件,会议纪要等)可阅读和理解需求文档、参与需求评审会并可理解需求内容(参与需求分析/评审的相关邮件,会议纪要等)可阅读和理解需求文档,并结合已有功能评估新需求关联性及影响、参与需求评审会并可提出意见和建议(参需求关件,需求审相关要证明等)需求分析方法论、行业分析报告、竞品分析报告1、业务专业词汇问答了解2、业务专业场景问答了解。
2023-11-12 14:21:38 567
原创 并发工具类库使用的常见问题
由于ThreadLocal是和线程绑定的,如果线程被复用了,也即使用了线程池,那么ThreadLocal中的值是可能被复用的,这个特性如果是开发者没有预料到的,那么会产生很大的问题。例如,在JAVA web应用中,我们通常会使用很多ThreadLocal来保存一次请求的不同上下文信息,其中就包含登录用户,如果一次请求完成后,没有清理掉当前登录用户信息,那么当另外一个用户的请求进来,就会使用上一个用户,如果是涉及到数据写入,将直接导致数据错乱,造成严重生产问题。
2023-10-06 16:14:53 316
原创 领域驱动设计
有意思的是,可能因为成书年代过于久远,大多数人并没有读过 Eric 的书,而是凭直觉本能地接受了领域驱动这一说法,或是在实践中跟随周围的实践者学习使用它。所以从某种意义上说,Eric 倡导的领域驱动设计是一种模型驱动的设计方法:通过领域模型(Domain Model)捕捉领域知识,使用领域模型构造更易维护的软件。把模型作为精粹的知识,以用于传递。我们都知道有一个著名的公式“程序 = 算法 + 数据结构”,实际上这也是一种模型驱动的思路,指的是从数据结构出发构造模型以描述问题,再通过算法解决问题。
2023-10-06 15:03:51 118
原创 集合类中的反常规特性
世界上所有程序只在做一件事情:处理数据。而数据是需要结构来承载,数据结构由此而来,常见的数据结构包括 List、Set、Map、Queue、Tree、Graph、Stack 等,其中 List、Set、Map、Queue 可以从广义上统称为集合类数据结构。高级编程语言一般都会提供各种数据结构的实现,供我们开箱即用。Java 也是一样,比如提供了集合类的各种实现。Java 的集合类包括 Map 和 Collection 两大类。
2023-10-06 10:44:15 111
原创 Spring Boot-3-AbstractApplicationContext
同时,一个名为applicationEventMulticaster的multicaster在context中以bean的形式提供,并提供默认实现SimpleApplicationEventMulticaster。AbstractApplicationContext是application context的第一个实现者,还是被定义为抽象的,之所以定义成抽象的,是因为他不必、不允许被实例化,不能直接被其他类聚合(他的子类可以)。这些都在context里被定义为bean了。始自2001年1月21日。
2023-09-13 00:37:11 238
原创 JAVA项目建模之包目录结构
对于API,分为2种,一是提供API给外部调用,二是调用外部API,我们通常会封装好这2部分内容,针对提供给外部调用的接口,命名为。调用外部接口的内容,命名为。
2023-09-07 23:50:09 168
原创 编程行业专业术语
编程方法论是指软件开发中一系列编程的规则、步骤和技巧,旨在提高软件的可维护性、可复用性、可扩展性和可读性1。此外,编程方法论还包括面向过程、面向对象、面向函数等。
2023-09-06 23:19:28 377
原创 Spring之HandlerInterceptor和RequestBodyAdvice
拦截器的拦截逻辑是在org.springframework.web.servlet.DispatcherServlet中写的,需要注意的是,如果入口拦截顺序是a->b->c的话,那么出口拦截顺序是c->b->a,这个逻辑可以看org.springframework.web.servlet.HandlerExecutionChain里的一段逻辑。这里能很清晰的看到循环使用的次序。
2023-08-30 22:18:04 724
原创 yarn是什么
与npm类似,Yarn也可以用于安装、更新和删除JavaScript软件包。但相比于npm,Yarn在性能和安全性方面有一些优势。它使用并行下载和缓存机制,可以更快地安装依赖项。此外,Yarn还提供了更严格的版本锁定机制,以确保在不同环境中安装的软件包版本一致。它是由Facebook、Google、Exponent和Tilde共同开发的,旨在提供更快、更可靠的软件包安装和依赖关系管理。要使用Yarn,首先需要安装Node.js,然后在命令行中运行。命令来全局安装Yarn。安装完成后,可以使用。
2023-08-10 08:53:02 261
原创 node-sass是什么
是一种CSS预处理器,它扩展了CSS的功能并提供了更强大的样式表语言。Sass允许开发人员使用变量、嵌套规则、混合(Mixins)、继承等高级功能来编写更简洁、可维护的样式代码。Sass有两种语法格式:Sass(使用缩进)和SCSS(使用大括号和分号)。Sass语法更加简洁,没有大括号和分号,而SCSS语法更接近于常规的CSS语法,更容易学习和使用。使用Sass可以提高CSS的开发效率,减少重复的代码,增加代码的可读性和可维护性。Sass还提供了许多内置的函数和混合,可以帮助开发人员更方便地处理样式。
2023-08-09 23:46:34 4675
原创 Jenkins配置流水线
这个任务名称将会是Jenkins的workspace路径下的一个目录,如我建立了一个test任务,那么Jenkins会生成一个/jenkins_home/workspace/test目录,用来拉取代码编译等。所以请谨慎设置任务名称。
2023-08-02 00:11:13 222
原创 Mac plist文件
对于普通用户来说,基本不用管plist文件是什么,因为这个是应用程序开发者使用的。对于资深苹果使用者来说,可能需要修改应用属性或者破解软件时可能会用到。macOS、iOS、iPadOS的应用程序都可能会有plist配置文件,他是苹果系列操作系统特有的配置文件。plist的本质是个xml格式的文本文件,英文全称是property list,文件后缀使用.plist。
2023-07-30 17:55:50 2200
原创 Nginx配置实例
按照请求的资源,顺序检查资源是否存在,返回第一个找到的资源,如果没有找到请求的资源,则会使用最后一个参数进行内部重定向。会先找/a/b,没有找到,然后nginx就返回default.gif,此时浏览器地址栏上还是显示的/a/b。例1:www.example.com/a/b (假设资源不存在)
2023-07-25 12:41:49 160
原创 Linux用户和用户组
Linux是多用户、多任务操作系统一般来说,一个服务分配一个用户,这个用户只拥有这个服务相关文件的相关权限,如果用户不需要登陆,连密码都可以不分配,一般来说,非法分子都是获取当前进程的的权限来攻击服务器,而不是取得某个用户的用户名和密码。
2023-07-19 00:50:59 499
原创 Docker部署应用
docker run --name myApp -d -p 9000:8000 -v /home/a/b/logs:/logs -v /etc/localtime:/etc/localtime:ro 挂在目录,宿主目录:容器目录,后面的挂在使得容器使用宿主机的时间,ro表示只读。其中-f就是用来指定Dockerfile路径的,如果Dockerfile就在当前路径下,可以不用写-f /home/a/b/Dockerfile。docker run --name myApp 指定容器名称。三、Dockfile。
2023-07-14 01:01:22 204
原创 Spring接口受请求header影响
一般后端接口都是返回json数据,其中前端用的Accept=application/json,如果是接受的是数据流,Accept=text/event-stream,Spring会根据请求的Accept类型来决定如何响应数据。如果是流,你响应的数据只能是String。如果请求头中有Accept=text/event-stream,Spring会读取到这个值,然后走对应流程,往流中写入String类型数据,此时如果后端返回的是一个类型A,期望对象a转换成json串,就会报错类型A无法转换成String。
2023-07-13 21:35:07 92
原创 nginx配置获取真实ip
注意这个顺序,set设置要发往下一站的变量,紧接着写变量的取值。要想在应用中获取到真实IP,取决于各个转发节点的传递配置,第一、要确定客户端使用哪个请求头传递IP地址。field是变量名,是要发给下一站的变量。value是变量值,来源于请求方。
2023-07-12 23:44:21 2408
原创 Nginx配置文件
其中,这里并不是真的启动一个服务,是一个逻辑服务,是去匹配来请求服务的路径,listen是匹配请求者访问了什么端口,server_name是匹配请求者用了什么域名,location是将匹配上的请求转发到哪个地方去,proxy_pass的值是下游,或者叫转发目的地的域名。
2023-06-30 08:51:25 177
原创 Jenkins安装
>或2>&1作用:同时将错误信息、普通信息一并重定向输出到指定文件,会覆盖。1、下载war包并上传到服务器/usr/local/jenkins目录。2、设置Jenkins工作目录,需要使用环境变量设置。末尾的& 表示后台运行。
2023-06-08 23:22:23 919
游戏跨三大移动平台运行的实现机制是怎样的
2015-06-10
TA创建的收藏夹 TA关注的收藏夹
TA关注的人