
后端框架
文章平均质量分 90
还是转转
https://github.com/howely
展开
-
内存回收异常导致OOM的问题
GC异常是在业务基本没流量的凌晨时间发生,且在此期间其他pod均正常运行,不存在是临时高负载或特定场景触发内存峰值。GC异常的pod在重启后正常运行。这种GC异常的现象是偶然的,不可复现的。如果上述任意一个可能的原因导致了GC异常,那么这种情况应该是非偶然的,可持续观测的。由于异常pod很快被重启,没有日志,也没有更完善的监控方式,因此无法进一步分析问题。不排除是云服务商机器本身的硬件异常导致的。原创 2025-03-17 17:46:20 · 747 阅读 · 0 评论 -
在Spring中注入动态代理Bean
下面仿照Mapper的实现原理来自定义注解和代理工厂,实现自定义注入动态代理Bean。Class原创 2024-04-28 18:05:26 · 2191 阅读 · 4 评论 -
深入理解Spring Security
在理解Spring Security之前,需要先理解清楚和这几个概念。Authentication即认证,一般就是身份校验,比如最常见的用户名和密码校验。在一些简单的应用中,可能只需要认证就够了。但是大部分应用还有权限的概念。比如一个购物网站,普通用户输入用户名和密码之后,拥有浏览、购物、评论等权限。商家通过自己的用户名和密码登录之后,拥有查看销售数据、上传商品、设置商品价格等权限。网站管理员通过用户名和密码登录之后,拥有管理商家、设置网站营销活动等权限。所有的用户都需要登录,这就是身份认证。原创 2024-03-22 16:43:24 · 828 阅读 · 0 评论 -
认识和理解OCID
当你的用户需要访问服务器上受保护资源的时候,例如用户订单数据,用户购物车等,需要携带id_token。id_token是用户的身份标识,就像身份证一样。id_token是一个JWT Token。如果请求没有携带id_token,或者携带的id_token不合法,则表示本次请求认证不通过。你为其他人提供身份服务,其他应用需要从你的服务器获取用户信息。比如github提供身份服务,其他应用可以向github索要用户的信息,完成用户在他们平台的注册,即三方登录。原创 2024-02-29 15:44:02 · 1927 阅读 · 0 评论 -
过滤器执行顺序问题分析
最近碰到了一个关于过滤器的奇怪的问题。原创 2023-11-09 15:17:33 · 392 阅读 · 0 评论 -
Pod的内存使用率很高的问题分析
JVM并不会主动将未使用的内存归还给操作系统。原创 2023-09-25 17:57:30 · 4109 阅读 · 0 评论 -
从hibernate并发更新报错问题说起
Hibernate是JPA的实现,SpringDataJpa是在JPA的基础上封装的,主要是降低使用JPA的复杂性。原创 2023-06-05 16:24:49 · 1385 阅读 · 0 评论 -
Hibernate懒加载问题
Hibernate懒加载获取到的是代理对象,只包含id。只要在实际使用时才会触发真正的数据库操作。原创 2023-02-14 11:43:28 · 324 阅读 · 0 评论 -
Maven生命周期和插件
maven的生命周期就是对所有的构建过程就行抽象和统一。maven从大量项目和构建工具中总结了一套高度完善的、易扩展的生命周期。这个生命周期包含项目的清理、初始化、编译、测试、打包、集成测试、验证、部署和站点生成等几乎所有的构建步骤。Maven的生命周期是抽象的,其实际行为都是由插件来完成。转载 2022-11-23 17:57:42 · 324 阅读 · 0 评论 -
payara micro开发指南
微服务与payara在Java世界内部,Spring框架已成为微服务开发的事实上的标准,通过诸如Spring Boot和Spring Data之类的库,该框架易于使用,并且可以进行高效且大部分情况下轻松进行开发。但是,近年来也出现了许多其他的框架,声称可以缩短Java应用程序的启动时间并减少其内存占用。下面将进行简单介绍。Spring为了解决早期Java Enterprise的复杂性,Spring于2003年应运而生。Spring核心是依赖注入(DI)和面向切面编程(AOP),后来衍生出易于使用的S原创 2021-09-09 22:43:38 · 2424 阅读 · 0 评论 -
gRpc指南
本文翻译自官网。原文:https://grpc.io/docs/languages/java/quickstart/快速开始下面通过一个简单的样例,让你快速上手基于java的gRpc的使用。前置条件JDK7以上版本获取示例代码示例代码是grpc-java的一部分。从github仓库下载gprc代码压缩文件并解压,或者直接克隆代码:$ git clone -b v1.40.0 https://github.com/grpc/grpc-java进入示例代码路径:$ cd gprc-ja翻译 2021-08-26 23:13:20 · 525 阅读 · 0 评论 -
Dubbo原理与实践(2)
Dubbo是阿里开源的的rpc框架,现已成为Apache的顶级项目。Dubbo在国内的大公司中使用较多,具有良好的服务治理能力。在阿里停止维护一段时间后,2017年又重新开始维护,2.x的最新版本为2.7版本。2021年Dubbo更新到了3.0版本,相对于2.x版本,有了巨大的变化。博主将通过两篇文章分别对dubbo2和dubbo3进行简单的介绍,本文主要介绍dubbo3的变化。架构dubbo3服务发现dubbo3 与 dubbo2 的服务发现配置是完全一致的,不需要改动什么内容。但就实现原理上原创 2021-08-19 21:54:22 · 2698 阅读 · 0 评论 -
SpringCloud之Zuul
在SpringCloud基础的第5章节中介绍过SpringCloud的Zuul的使用。Zuul的原理是什么?本文将结合源码进行详细解释。在前文介绍Zuul的使用时,有以下几个步骤:在入口类上开启@EnableZuulProxy注解。在配置文件中创建请求地址和服务名的映射。创建一个过滤器类,继承ZuulFilter,来对转发的请求进行统一处理,如权限校验。Zuul执行流程ZuulControllerZuulController 是请求的入口,它继承于ServletWrappingContr原创 2021-07-27 16:05:10 · 2533 阅读 · 0 评论 -
SpringCloud之Ribbon
在前文1.3章节中介绍过,使用SpringCloud的ribbon作为客户端负载均衡非常简单,只需要两步操作即可:1.注册消费者;2.通过调用被@LoadBalanced注解修饰的RestTemplate来实现面向服务的接口调用。为什么使用被@LoadBalanced注解修饰的RestTemplate发起调用就能实现ribbon客户端负载均衡呢?本文将结合源码进行详细解释。LoadBalancerAutoConfiguration在LoadBalanced注解的注释里面有这么一句话:Annotat原创 2021-07-27 00:51:45 · 133 阅读 · 0 评论 -
Dubbo原理与实践(1)
基本介绍Dubbo是阿里开源的的rpc框架,现已成为Apache的顶级项目。Dubbo在国内的大公司中使用较多,具有良好的服务治理能力。在阿里停止维护一段时间后,2017年又重新开始维护,2.x的最新版本为2.7版本。2021年Dubbo更新到了3.0版本,相对于2.x版本,有了巨大的变化。如无特殊说明,本文将以2.7版本为基础。架构dubbo架构如下图所示:节点角色说明Provider,暴露服务的服务提供方Consumer,调用远程服务的服务消费方Registry,服务注册与发现的注册原创 2021-07-21 23:25:01 · 246 阅读 · 0 评论 -
SpringBoot自动装配原理解析
SpringBoot的一大优势就是省去了很多的配置,当SpringBoot启动的时候,在内部进行了自动装配的工作,使得开发人员无需配置或者只需要很少的配置就能直接开发业务。SpringBootApplication注解SpringBoot项目主函数入口的注解为SpringBootApplication,其定义如下:@Target(ElementType.TYPE)@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBo原创 2021-07-09 22:56:36 · 178 阅读 · 1 评论 -
基于token的登陆验证机制
常用的登录验证机制包括session和token。session简介做过Web开发的程序员应该对Session都比较熟悉,Session是一块保存在服务器端的内存空间,一般用于保存用户的会话信息。用户通过用户名和密码登陆成功之后,服务器端程序会在服务器端开辟一块Session内存空间并将用户的信息存入这块空间,同时服务器会在cookie中写入一个Session_id的值,这个值用于标识这个内存空间。下次用户再来访问的话会带着这个cookie中的session_id,服务器拿着这个id去寻找对应的se原创 2021-04-12 23:39:45 · 1706 阅读 · 0 评论 -
tornado之多进程服务
tornado多进程开启在前文中简单介绍过tornado的基本使用。tornado默认启动的是单进程,启动方式如下:if __name__ == "__main__": application = tornado.web.Application([(r"/", MainHandler)]) # application.listen(8888) server = HTTPServer(application) server.listen(8888) tornado.原创 2020-06-09 20:40:12 · 2596 阅读 · 0 评论 -
Spring Bean的生命周期和Spring容器
Spring Bean的生命周期众所周知,Spring中的bean由Spring容器负责管理,包括对象的整个生命周期:创建、装配、销毁。具体的生命周期通过下图可以描述:说明如下:Spring实例化一个bean,默认是单例的。Spring对bean进行依赖注入。如果bean实现了BeanNameAware接口,则将bean的id传给setBeanNameAware方法。如果bean实现了BeanFactoryAware接口,则将beanFactory实例传给setBeanFactory方法。原创 2020-06-01 21:23:21 · 730 阅读 · 0 评论 -
Thrift基础
Thrift是Facebook开源的一款rpc调用框架,提供给Apache之后叫做Apache Thrift。它是一种高效的、支持多种编程语言的远程服务调用框架。本文将以python和java为例来介绍thrift的开发和使用。1 简介Thrift中有几个重要的概念,下面将依次次介绍。TransportTransport是网络读写(socket,http)的抽象,用于和其他thrift...原创 2019-06-23 22:43:51 · 565 阅读 · 0 评论 -
读书笔记:大型分布式网站架构设计与实践(3)
3 互联网安全架构随着移动物联网的兴起,以及Restful和Web Service等技术的大规模使用,HTTP协议因其使用方便以跨平台的特性,在Web开发和SOA领域得到了广泛应用,但其所涵盖的信息,大都是未经加密的明文,信息获取门槛的降低,也为应用架构的安全性与稳定性带来了挑战。本章一共分为六个小节,分别介绍了常见的Web攻击手段,常用的安全算法,摘要认证,签名认证,Https协议和OAut...原创 2018-10-12 15:52:08 · 264 阅读 · 0 评论 -
读书笔记:大型分布式网站架构设计与实践(2)
2 分布式系统基础设施一个大型、成熟的分布式系统的背后,往往会涉及众多的支撑系统,也即所谓的分布式系统的基础设施,如第一章介绍过的分布式协作及配置管理系统Zookeeper,还有本章将要介绍的分布式缓存系统、持久化存储系统、分布式消息系统、搜索引擎,另外还有CDN系统、负载均衡系统、运维自动化系统等等。本章一共分为四个小节,分别介绍了分布式缓存,持久化存储,分布式消息系统和垂直化搜索引擎。2...原创 2018-09-30 18:50:39 · 557 阅读 · 0 评论 -
Hystrix-介绍与使用(下)
上篇中对hystrix的隔离和熔断作了基本的介绍,本文将说明Hystrix在项目中的实际使用。在开发中很多时候需要调用第三方接口或依赖,而第三方接口或依赖的响应时间是无法被调用方控制的。如果调用方发出大量的请求而长时间无响应,很可能会导致大量线程资源在阻塞中,拖垮服务器的性能。因此在调用第三方接口或依赖时使用hystrix进行隔离和熔断是有必要的。注解使用最常用的方式就是通过Hystrix注...原创 2018-09-29 16:28:48 · 2052 阅读 · 1 评论 -
读书笔记:大型分布式网站架构设计与实践(1)
原计划花一年半时间看完十二本书,目录如下:(1)大型分布式网站架构设计与实践(陈康贤,电子工业出版社) (2)大型网站系统与Java中间件实践(曾宪杰,电子工业出版社) (3)Java并发编程实战(童云兰等译,机械工业出版社) (4)Java并发编程的艺术(方腾飞,机械工业出版社) (5)深入理解Java虚拟机(机械工业出版社) (6)Effective Java中文版(机械工业出版...原创 2018-09-14 17:02:34 · 422 阅读 · 0 评论 -
前端参数请求和后端参数接受
参数请求与接收HTTP协议中定义了很多与服务端交互的方法,其中最基本的有四种,分别是GET,POST,PUT,DELETE,对应增删改查四种操作,最常用的是GET和POST。请求头类型Content-Type主要有:application/x-www-form-urlencoded,multipart/form-data和application/json。其中application/x...原创 2018-08-06 22:09:33 · 15720 阅读 · 0 评论 -
线程池处理高并发请求
背景:本系统会在每个月特定时间接收上游系统发起的大量请求并进行处理,并将处理结果通过主动回调或提供查询接口的方式反馈给上游系统。原创 2018-06-01 18:35:54 · 8248 阅读 · 1 评论 -
Mybatis根据数据库表自动生成实体类和xml映射文件
环境:maven+idea。1. 需要的jar包基本的spring和mybatis依赖包就不说了,在pom文件的build->plugins节点下需要添加(两个依赖包也可以直接添加到pom的依赖里面去,这里是为了直接通过maven的插件来生成。如果不是使用maven,可按照参考资料1来进行):<plugin> <groupId>org.mybati...原创 2018-03-22 20:05:06 · 8462 阅读 · 4 评论 -
Drools规则引擎
0. 背景最近接到一个根据配置的规则进行路由的需求,实现方案中考虑过drools。然后大致研究了一下规则引擎Drools,借助本文进行一个总结和整理。1. Drools简介Drools是用Java编写的开源的规则引擎。规则引擎是什么?百度百科里面定义如下:规则引擎是由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语言模块编写...原创 2018-03-06 18:53:18 · 1064 阅读 · 0 评论 -
SpringMVC异常处理
HandlerExceptionResolver接口该接口仅仅定义了一个方法,就是异常解析方法。接口如下: public interface HandlerExceptionResolver { ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object原创 2018-01-13 18:28:14 · 224 阅读 · 0 评论 -
线程日志标记和接口日志标记
线程维度 当我们的项目中同一时间打印的日志较多,例如同一时间有5个线程在执行,每个线程分别要打出1到20这几个数字,这样三个线程的日志就会互相穿插,除了系统自动生成的线程标识,根本不能清晰地看出具体的单个线程的执行流程。假入一个线程在执行过程中出现异常中断且不打印异常,在大量日志中就很难判断该线程在哪里中断。而系统自动生成的线程标识这东西,在实际的生产中,基本不可能用这玩意儿。所以得有另外一个方法原创 2017-12-14 16:32:18 · 770 阅读 · 0 评论 -
SpringMVC自定义参数处理器不生效问题
在springmvc中,经常用到自定义的入参解析器和返回参数解析器。 使用方式如下,在spring容器中配置:原创 2017-12-05 20:10:26 · 1278 阅读 · 0 评论 -
SSO之CAS单点登录详细搭建教程
看到一篇非常好的sso搭建文章,转载过来。原文地址:http://www.cnblogs.com/zhoubang521/p/5200407.html【环境说明】: 本文演示过程在同一个机器上的(也可以在三台实体机器或者三个的虚拟机上),环境如下:·windows7 64位·jdk1.7.0_51·apache-tomcat-7.0.57-windows-x64·cas-server-webapp转载 2017-10-11 18:36:45 · 276 阅读 · 0 评论 -
SpringCloud基础(5)
8 Zuul处理Cookie和重定向在实际项目中,将Spring Cloud Zuul作为API网关接入时,经常会碰到下面两个常见的问题: 会话无法保持 重定向后的HOST错误8.1 会话保持问题通过跟踪一个HTTP请求经过Zuul到具体服务,再到返回结果的全过程。可以发现在传递的过程中,HTTP请求头信息中的Cookie和Authorization都没有被正确传递给具体服务,所以最终导致会话状原创 2017-09-29 19:21:49 · 597 阅读 · 0 评论 -
SpringCloud基础(4)
6 服务注册中心Consul前文中介绍了Spring Cloud的核心组件,包括服务注册与发现组件Eureka,熔断器Hystrix,配置中心Spring Cloud Config和服务网关Zuul。在前文的基础上进行工作。先将Spring Cloud的版本进行升级:将pom.xml中的parent模块版本升级为1.5.4.RELEASE,同时将spring-cloud-dependencies组件原创 2017-09-21 18:50:19 · 361 阅读 · 0 评论 -
SpringCloud基础(3)
4 消息总线在前面的配置中心篇中讲到过,可以通过消息总线刷新配置的更新。Spring Cloud Bus除了支持RabbitMQ的自动化配置之外,还支持现在被广泛应用的Kafka。下面将通过Kafka实现消息总线的功能。4.1 Kafka简介Kafka是一个由LinkedIn开发的分布式消息系统,于2011年初开源,现由Apache维护和开发。Kafka使用Scala实现,被用作LinedIn的活动原创 2017-09-21 13:47:36 · 622 阅读 · 0 评论 -
SpringCloud基础(2)
参考: http://blog.didispace.com/springcloud3/,http://blog.didispace.com/springcloud4/,http://blog.didispace.com/springcloud7/2 断路器在微服务架构中,存在着多个微服务,彼此之间可能存在依赖关系,当某个单元出现故障或者网络不通时,就会因为依赖关系形成故障蔓延,最终导致整个系统的瘫原创 2017-09-18 19:21:42 · 758 阅读 · 0 评论 -
跨域请求不被允许
public class CorsFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse原创 2017-09-15 19:03:55 · 2193 阅读 · 0 评论 -
SpringCloud基础(0)
Spring Cloud是一系列框架的有序集合,是一个分布式系统基础设施的解决方案。利用Spring Boot的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用Spring Boot的开发风格做到一键启动和部署。原创 2017-09-13 10:56:06 · 376 阅读 · 0 评论 -
SpringCloud基础(1)
1 服务注册中心、提供者和消费者 1.1创建服务注册中心。 创建一个maven工程,在pom.xml中引入依赖的内容:<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.原创 2017-09-12 18:57:15 · 366 阅读 · 0 评论 -
SpringBoot基础(3)
11.SpringBoot事务spring Boot 使用事务非常简单,首先使用注解 @EnableTransactionManagement开启事务支持后,然后在访问数据库的Service方法上添加注解 @Transactional 便可。关于事务管理器,不管是JPA还是JDBC等都实现自接口 PlatformTransactionManager 如果你添加的是 spring-boot-sta原创 2017-08-31 18:48:38 · 316 阅读 · 0 评论