后端
文章平均质量分 72
DuanJiaNing_
越努力越幸运
展开
-
使用 OpenTelemetry 管理观测类数据
使用 OpenTelemetry 管理观测类数据原创 2022-09-16 11:18:27 · 574 阅读 · 1 评论 -
使用 zebra 对数据库表进行水平拆分
zebra 是美团点评开发的数据库访问层中间件,代码维护在 GitHub:Meituan-Dianping/ZebraZebra是一个基于JDBC API协议上开发出的高可用、高性能的数据库访问层解决方案,是美团点评内部使用的数据库访问层中间件。具有以下的功能点:配置集中管理,动态刷新支持读写分离、分库分表丰富的监控信息在CAT上展现异步化数据库请求,多数据源支持zebra 的...原创 2018-12-07 11:02:08 · 1915 阅读 · 0 评论 -
解析配置文件自动装配 DataSource + AbstractRoutingDataSource + AOP 实现动态数据源 - 补充:兼顾事务回滚以及分布式事务的情况
前两篇文章已经介绍了动态数据源的具体实现过程,在经过一段时间的使用后,发现了两个比较严重的问题,在这里进行补充说明。事务执行失败时没有切回默认数据源@Transactional 注解的方法意味着使用数据库事务执行方法中的 sql 操作,默认情况下当方法抛出不受检查异常时,事务会进行回滚,我所实现的动态数据源方案通过 AOP 和注解的方式切换数据源, @Transactional 方法执行前切换...原创 2018-11-28 17:55:17 · 416 阅读 · 0 评论 -
单体应用和服务化应用的一些思考
单体应用单体应用整个项目代码都在同一个应用工程中,这种方式在早期可以有效提高开发效率,测试、部署和运维也比较方便。少量的开发人员就可以完成所有工作。然而随着业务规模、数据量的不断扩大,单体应用就会出现问题,部署测试效率低下:每次修改了代码需要进行测试验证时必须将整个应用进行编译、打包以及部署,耗费大量时间;后期维护和迭代时开发难度大:单体应用的所有代码都在同一应用中,进行迭代时新需求涉及的...原创 2018-11-19 10:35:00 · 444 阅读 · 0 评论 -
Spring MVC 根据 controller 层方法入参和返回值动态生成日志 - 下 :借助 SpEL 或自定义的方式解析日志表达式
上一篇文章已经就如何获取到 controller 层方法的参数和返回值进行了详细分析,并且封装了 HandlerMethodPostProcessor 接口以便使用,接下来就实现业务需求:根据 controller 层方法的入参和返回值动态生成日志。实现日志解析实现思路是这样的:定义一个注解,注解的 value 为日志表达式,HandlerMethodPostProcessor#postPro...原创 2018-11-16 16:55:13 · 930 阅读 · 0 评论 -
Spring MVC 根据 controller 层方法入参和返回值动态生成日志 - 上 :寻找扩展点并进行封装
背景需求是这样的:对网关层指定接口(url)的调用情况做日志记录,日志需要根据 controller 层方法的入参和返回值动态生成。如果只是记录 url 的调用情况可以直接使用 HandlerInterceptor 实现,但需求中需要能够访问入参和返回值,虽然通过拦截器提供的接口也可以解析到请求参数以及返回值,但都需要对这些参数进行一定的处理,因此直接在 Controller 层方法上处理是最...原创 2018-11-16 16:02:17 · 1703 阅读 · 0 评论 -
解析配置文件自动装配 DataSource + AbstractRoutingDataSource + AOP 实现动态数据源 上:原理解析,解析数据源
spring boot 自动装配会通过 spring.datasource.*为我们自动装配数据源,所以想要动态的切换数据源,第一件事是配置数据源,其次是怎么切换?最后何时切换?原理解析(使用 AbstractRoutingDataSource 实现)spring-jdbc 提供了 AbstractRoutingDataSource 在 getConnection() 时通过 lookup k...原创 2018-11-13 17:16:22 · 836 阅读 · 1 评论 -
解析配置文件自动装配 DataSource + AbstractRoutingDataSource + AOP 实现动态数据源 下:配置动态数据源,AOP 进行使用
上篇文章中已经借助 DynamicDataSourceBuilder 类从配置文件中解析得到了默认数据源和动态数据源,接下来需要配置动态数据源的“本体”,并借助 AOP 动态的切换数据源。配置动态数据源AbstractRoutingDataSource 实现了 InitializingBean 接口,在 afterPropertiesSet方法中通过处理 targetDataSources 和...原创 2018-11-13 17:14:39 · 675 阅读 · 0 评论 -
fastjson 始终将 null 对象以 "null " 的形式返回到前端引发的源码解析 - 上:从 DispatcherServlet 出发
背景项目中使用 fastjson 将 spring MVC 返回结果输出为 json 格式数据,有个需求是 null 对象不输出,即前端不会接收到 "obj": null 形式的 json 数据,然而在进行如下的配置后, null 对象始终输出,因此以阅读源码的方式解决该问题。源码分析DispatcherServletDispatcherServlet 是 spring MVC 的入口 ...原创 2018-11-07 13:21:54 · 601 阅读 · 0 评论 -
fastjson 始终将 null 对象以 "null " 的形式返回到前端引发的源码解析 - 下:来到 fasjson 内部,消除疑惑
接上篇:fastjson 始终将 null 对象以 "null " 的形式返回到前端引发的源码解析 - 上:从 DispatcherServlet 出发终于来到了 fastjson 内部。FastJsonHttpMessageConverter内部又调用了一系列的方法,最终定位到了 JavaBeanSerializer#write 的 216 行。在这里 fastjson 与 sprin...原创 2018-11-07 13:20:02 · 506 阅读 · 0 评论 -
从 HTTPServletRequest 中根据 User-Agent 获取访问设备信息
背景:根据 HttpServletRequest获取访问设备信息。Http 协议请求头中的 User-Agent属性会将客户端设备的信息传递给服务器,这些信息包括客户端操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。参考: 用户代理(User-Agent)然而客户端设备种类、操作系统及其版本繁多,使得 User-Agent 参数的值也有很多种可能。庆幸的...原创 2018-11-01 18:45:35 · 15754 阅读 · 2 评论