Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。可以有效、高速地处理从很小到非常大的项目版本管理。从根本上来讲 Git 是一个内容寻址(content-addressable)文件系统,并在此之上提供了一个版本控制系统的用户界面。 本篇文件将深入介绍 Git 内部的工作机制。
自动切割 Nginx 日志
默认nginx不会自动切割日志,当日志文件越来越大当时候,不仅浪费磁盘空间,nginx的性能也会降低。可以使用Linux的logrotate来解决这个问题。
SpringBoot实现JPA读写分离
前面的文章讲解了 MyBatis 和 MongoDb 的读写分离配置,今天将讲解一下 JPA 的读写分离配置, 通过事务的只读属性值来切主从换数据源。
使用 Spring REST Docs 创建REST服务文档
Spring REST Docs 可以帮助开发人员方便地编写服务文档。
MongoDB 复制集实现读写分离
Mongodb 早期版本使用类似于 MySQL 的 master-slave 方式,但 slave 为只读,当 master 宕机后,slave 不能自动切换为 master。目前已经废弃,改为了复制集方式。
自定义 RestTemplate 异常处理
一些 API 的报错信息通过 Response 的 body返回。使用 HttpClient 能正常获取到 StatusCode 和 body 中的错误提示。然而使用 RestTemplate ,会直接抛出下面的异常。如果想获取原始的信息并进一步处理会比较麻烦。
CommandLineRunner 和 ApplicationRunner
如果想在 SpringApplication 启动后需要运行某些特定代码,可以通过实现 ApplicationRunner 或 CommandLineRunner 接口。 这两个接口以的工作方式相同,并提供单个 run 方法,该方法在 SpringApplication.run(…)方法结束之前被调用。
Java对URI路径中的分号进行编码
在URL中,由于 “;” 是保留字符,Java 默认不会对它转码,在某些情况下会出现问题。
修改GitHub邮箱后丢失contributions的解决办法
今天修改了 GitHub 邮箱并且将旧邮箱删除。后来查看 GitHub 主页的时候,发现自己的 contributions 数据丢失了。原来 contributions 的统计是和 Email 关联的,修改了邮箱后数据就没有了。
使用 CompletableFuture 构建异步应用
前面的文章中简单介绍了 Future 接口,Future接口在Java 5中被引入,设计初衷是对将来某个时刻会发生的结果进行建模。要使用Future,通常你只需要将耗时的操作封装在一个Callable对象中,再将它提交给ExecutorService,然后调用它的get方法去获取操作的结果。如果操作已经完成,该方法会立刻返回操作的结果,否则它会阻塞你的线程,直到操作完成,返回相应的结果。