概述
随业务量增长,数据库读写分离是迟早要面临的问题。另外,公司在上规模后一般也会要求统一采用主从分布式数据库。
我习惯的处理方案是在应用层进行隔离:即将以写为主的业务放在一个应用上,以读为主的业务放在其他应用上。这应该算是最简单粗暴的解决方案了,却也能帮我应对90%需要读写分离的场景。不过总还有10%的特殊场景需要思考下怎样在应用内实现读写分离。
在应用内做读写…
随业务量增长,数据库读写分离是迟早要面临的问题。另外,公司在上规模后一般也会要求统一采用主从分布式数据库。
我习惯的处理方案是在应用层进行隔离:即将以写为主的业务放在一个应用上,以读为主的业务放在其他应用上。这应该算是最简单粗暴的解决方案了,却也能帮我应对90%需要读写分离的场景。不过总还有10%的特殊场景需要思考下怎样在应用内实现读写分离。
在应用内做读写…
工程中在使用POI导出Excel数据,某次因为导出的数据量比较大就报了下面的错误:
|
1 2 3 4 |
java.lang.IllegalArgumentException: Invalid row number (65536) outside allowable range (0..65535) at org.apache.poi.hssf.usermodel.HSSFRow.setRow |
最近的工作涉及到了生成xml文件并上传到AWS存储服务S3这样的处理。期间遇到了两个问题,简单记录下:
springboot的版本是2.1.9.RELEASE,读写xml文件使用的是Dom4J,版本是2.1.3。逐个说明下遇到的这几个问题。
现阶段是将x
简单记录一下在Springboot中上传文件到AWS S3存储服务的代码。
在application.xml中添加aws相关配置:
|
1 2 3 4 5 6 |
custom: aws: access-key: CHOBITACCESSKEY secret-key |
在使用jackson处理json时遇到了反斜杠相关的问题。比如我们从数据库或文件中读到了这样的一个json字符串:
|
1 |
{"text":"Hello \World!"} |
可以看到在World前面有一个反斜杠。因为这个反斜杠,JetBrains IDEA会提示这是一个错误的字符串,使用jakcson处理这个json字符串时也会报错,错误信息如下:
|
1 2 3 4 5 6 7 8 9 10 1 |
如果MySQL表的一些字段被设置为不允许为空,使用MyBatis写入的数据中相应字段的值是null就有可能会报类似下面的错误:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
org.springframework.dao.DataIntegrityViolationException: ### Error updating database. C |
工作中经常会有生成唯一字符串的需求。通常最容易想到的是UUID。UUID的唯一性毋庸置疑,但是32位的长度也容易让人退避三舍。也曾经想过参考《短网址生成方案》来生成一串ID,但是试验了一下发现唯一性不太好。
最终采用的方案是时钟方案,简单来说就是用当前时间戳做唯一ID。
采用时间戳做ID,秒或毫秒都容易产生重复,换成纳秒在单节点上就没问题了。参考百度百科关于纳秒…
在SpringBoot的源码中有看到使用abstract关键字定义的工具类,如:
|
1 2 3 4 5 6 7 8 9 |
package org.springframework.util; public abstract class StringUtils { public static boolean isEmpty(@Nullable Object str) { retur |
做360广告的对接需要对密码进行AES加密,下面是点睛平台文档的描述:
(AES模式为CBC,加密算法MCRYPT_RIJNDAEL_128)对MD5加密后的密码实现对称加密。秘钥是apiSecret 的前16位,向量是后16位,加密结果为64位数字和小写字母。
用Java实现AES需要依赖Java加密扩展(The Java Cryptography Extension…
这个内容有点儿水了。但是将springboot启动时的banner修改一下是个蛮好玩的事情。比如,不知道什么时候,我们组的springboot应用的banner就被改成了这个样子:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
/////////////////////////////////////////////////////// |