- 博客(17)
- 收藏
- 关注
原创 Spring是如何支持多数据源的
Spring提供了一个AbstractRoutingDataSource类,用来实现对多个DataSource的按需路由,本文介绍的就是基于此方式实现的多数据源实践。
2022-06-06 10:25:46 1277
原创 Spring 声明式事务应该怎么学?
hello,大家好,我是课代表。关注我的公众号:Java课代表, 原创干货首发地儿,等你来呦!1、引言Spring 的声明式事务极大地方便了日常的事务相关代码编写,它的设计如此巧妙,以至于在使用中几乎感觉不到它的存在,只需要优雅地加一个 @Transactional 注解,一切就都顺理成章地完成了!毫不夸张地讲,Spring 的声明式事务实在是太好用了,以至于大多数人都忘记了编程式事务应该怎么写。不过,越是你认为理所应当的事情,如果出了问题,就越难排查。不知道你和身边的小伙伴有没有遇到过 @Tra
2021-09-07 09:24:50 197
原创 POJO类中布尔类型为啥不让用isXxx命名
源码面前,了无秘密。《阿里开发规范泰山版》(2020.04.22)–>编程规约–>(一) 命名风格–>第8条规定:【强制】POJO 类中的任何布尔类型的变量,都不要加 is 前缀,否则部分框架解析会引起序列化错误。对于这样一条【强制】级别的规定,虽然规范中做了简单的说明,但依然显得很不起眼,以至于我虽然规范背的很熟,依然踩到了这个坑。0 起因最近写了一个钉钉告警工具类,对于这种需求明确,开发文档清晰的任务,写代码信手拈来,很快就写完了。但是自测的时候却发现@所有人这个接.
2021-08-26 09:33:30 400
原创 开发环境的配置提生产了!这坑怎么填?
开发过程中,我们一般会有若干个不同的环境,如:开发环境,生产环境。一般情况下,不同环境下的程序配置是不同的。通过这样的配置,我们就可以指定,在开发环境使用dev配置,在生产环境使用pro配置,从而一次解决提错配置文件的问题,而且还很优雅!有了YAML文件的配置,不同环境的不同配置终于不用改来改去了,但提交代码时还是要注意指定。例如:开发阶段,我们可以采用嵌入式的H2数据库,但生产环境中使用mysql。的值,否则还有提错配置的风险,有没有一劳永逸的办法呢?,关注公众号,及时获取更多Java干货。
2021-08-25 08:45:31 96
原创 单例模式,关键字级别详解
0.前言如果你去问一个写过几年代码的程序员用过哪些设计模式,我打赌,90%以上的回答里面会带【单例模式】。甚至有的面试官会直接问:说一下你用过哪些设计模式,单例就不用说了。你看,连面试官都听烦了,火爆程度可见一斑。不过,看似简单的单例模式,里面蕴含了很多Java基础,日常开发过程中课代表见过很多不规范的,甚至是有问题的单例实现。所以整理此文,总结一下单例模式的最佳实践。1、懒加载(懒汉)所谓懒加载,就是直到第一次被调用时才加载。其实现需要考虑并发问题和指令重排,代码如下:public class
2021-08-03 09:51:54 359
原创 一题搞定static关键字
基础不牢,地动山摇。hello大家好,我是Java课代表。开篇一道题,考察代码执行顺序:public class Parent { static { System.out.println("Parent static initial block"); } { System.out.println("Parent initial block"); } public Parent() { System.out.p.
2021-08-02 09:22:05 135
原创 使用Spring Validation优雅地校验参数
写得好的没我写得全,写得全的没我写得好。Hi大家好,我是课代表。引言不知道大家平时的业务开发过程中 controller 层的参数校验都是怎么写的?是否也存在下面这样的直接判断?public String add(UserVO userVO) { if(userVO.getAge() == null){ return "年龄不能为空"; } if(userVO.getAge() > 120){ return "年龄不能超过120"; .
2021-07-15 14:02:56 363
原创 Freemarker 教程(一)-模板开发手册
layout: posttitle: “Freemarker 教程(一)-模板开发手册”date: 2021-2-2 08:00:00 +0800category: Javaauthor: Java课代表excerpt: 本文是Freemarker系列的第一篇,面向模板开发人员,主要介绍 FreeMarker 所使用的 FTL语法,了解 Freemarker 的基本概念本文是Freemarker系列的第一篇,面向模板开发人员,主要介绍 FreeMarker 所使用的 FTL(FreeM.
2021-07-14 08:37:30 5316
原创 Dubbo异常处理源码探究及其最佳实践
Hello,大家好,我是Java课代表。推荐语:Dubbo作为一款高性能的 RPC 框架,在微服务架构中广泛应用,本文基于开发过程中的一次异常处理,深入剖析了Dubbo 的异常处理逻辑,并结合源码,给出了 Dubbo 异常处理的最佳实践。1 背景在日常业务开发过程中,我们为了让业务代码更健壮,遇到错误时返回的提示更友好,一般会自定义一些业务异常。根据业务需要,分为自定义受检异常和非受检异常知识点回顾Exception类及其子类,但不包括 RuntimeException 的子类,统称为受检异
2021-07-13 09:50:02 297
翻译 RabbitMQ教程5. Topics
搜索:Java课代表,关注公众号,及时获取更多Java干货。5 Topics在前面的教程中,我们改进了日志系统,为了解决fanout exchange 的无脑广播,我们使用direct替换,从而实现了选择性接收日志。尽管使用direct exchange 改进了系统,他还是有局限性——它不能基于多种准则来路由消息。在我们的日志系统中,我们既想根据日志级别订阅日志,还想根据日志源订阅日志。你可能从syslog unix 工具中了解过这个概念,它基于日志的级别和设备来路由日志。这将带来极大的灵活.
2021-07-12 08:43:22 92
翻译 RabbitMQ教程 4. 路由(Routing)
搜索:Java课代表,关注公众号,及时获取更多Java干货。4 路由(Routing)在上一篇教程中我们创建了一个简易的日志系统。可以将日志消息广播给多个接收者。本教程中,我们将给它添加一个新特性——让单独订阅某一部分消息(子集)成为可能。比如,我们只把严重错误写入到磁盘文件中(只保存严重错误日志可以节省磁盘),同时仍然将所有日志都在终端输出。绑定(Bindings)在前面的例子中,我们已经创建了绑定,你可能还记得如下代码:channel.queueBind(queueName, EXCH.
2021-07-10 09:25:48 165
翻译 RabbitMQ教程 3.发布/订阅(Publish/Subscribe)
搜索:Java课代表,关注公众号,及时获取更多Java干货。3 发布/订阅(Publish/Subscribe)在上一节中,我们创建了一个工作队列。其目的是将每个任务只分发给一个worker。本节我们将换一种玩法:我们投递一条消息,让所有消费者都能接收到。这种模式称为发布/订阅(Publish/Subscribe)。为了演示这种模式,我们将构建一个日志记录系统。它包含两个应用——第一个发送日志消息,第二个接收并打印日志消息。在我们的日志记录系统中,每个运行中的接收程序都能接收到消(课代表注:相.
2021-07-09 09:16:41 755
翻译 RabbitMQ教程 2.工作队列(Work Queue)
2 工作队列(Work Queue)在第一篇教程中,我们写了两个程序用来从指定的 queue 中发送和接收消息。这篇教程,我们将创建一个工作队列,用来给多个 worker 分发一些"耗时的"任务。工作队列(或者称之为任务队列)背后的思想,是用来避免立即处理那些很耗资源并且需要等待其运行结束的任务(课代表注:说白了就是削峰)。取而代之的是,将任务安排到稍后进行(课代表注:说白了就是异步执行)。一个后台运行的工作程序将会接收到并执行该任务。当你运行了多个工作程序,工作队列中的任务将会被他们共同分担处理。
2021-07-09 09:03:32 284
翻译 RabbitMQ教程1.“Hello World”
消息队列作为开发中常用的中间件,主要应用于处理削峰、异步、解耦等场景。RabbitMQ因其使用简单,配置灵活,管理方便而广受使用。为了方便小白快速入门,课代表翻译了官方教程原文供大家参考,以下为其第一篇:“Hello World”1 “Hello World”介绍RabbitMQ 是一个消息代理(message broker):它接收并转发消息。你可以把它想象成邮局,当你把要发送的信件放到邮箱里时,你可以确信某位邮递员最终会将你的信件投递给接收人。在这个类比中,RabbitMQ 就是邮箱+邮局+.
2021-07-08 10:48:05 339
原创 下载的附件名总乱码?你该去读一下 RFC 文档了!
纸上得来终觉浅,绝知此事要躬行文章目录1. Content-Disposition2.PercentEncode3. 代码实践4. 浏览器测试5.总结6.参考资料Web 开发过程中,相信大家都遇到过附件下载的场景,其中,各浏览器下载后的文件名中文乱码问题或许一度让你苦恼不已。网上搜索一下,大部分都是通过Request Headers中的UserAgent字段来判断浏览器类型,根据不同的浏览器做不同的处理,类似下面的代码:// MicroSoft Browserif (agent.contain.
2020-11-11 08:42:58 768
原创 深入浅出 MySQL 优先队列(你一定会踩到的order by limit 问题)
英语和算法是程序员的两条腿文章目录0.先抛问题场景复现1. 寻找最优解2.MySQL 的 ORDER BY 逻辑3.priority queue(优先级队列)4.加索引为什么是次优解5. 总结6.参考资料本文适用于 MySQL 5.6 及以上版本0.先抛问题假设字段category无索引且有重复值,order by category 和limit组合使用的结果会和预期不符。场景复现表结构(就是两个字段)CREATE TABLE `ratings` ( `id` int(11) NOT .
2020-11-11 08:28:19 867 2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人