从今年初接触Sharding JDBC 4.0到现在,近一年了,用来做日志和消息分表一直运行,没什么大的问题。前些天生产新上了一个服务,是因为Sharding JDBC把select for update语句解析为查询,在从库中执行,因为从库是只读权限所以报错。
之前没在测试环境发现这个问题,是因为测试环境数据库没有主从。想起当时刚接触Sharding JDBC写的Demo,于是整理一番,重新拉分支,并完善整个流程,模拟真实场景。

从今年初接触Sharding JDBC 4.0到现在,近一年了,用来做日志和消息分表一直运行,没什么大的问题。前些天生产新上了一个服务,是因为Sharding JDBC把select for update语句解析为查询,在从库中执行,因为从库是只读权限所以报错。
之前没在测试环境发现这个问题,是因为测试环境数据库没有主从。想起当时刚接触Sharding JDBC写的Demo,于是整理一番,重新拉分支,并完善整个流程,模拟真实场景。
把原生Http Connection改为使用Feign请求调用外部接口,在方法上添加注解:
@PostMapping("{接口url}")
@Headers({"Content-Type: application/json"})
返回:
看来用@Headers设置的Content-Type没有生效。@Headers是Feign自带的注册,而@PostMapping是Spring MVC的注解。在@PostMapping中也有header属性,于是改为:
@PostMapping(value = "{接口url}", headers = {"Content-Type: application/json"})
问题依旧。
(更多…)很久以前就使用Mybatis开发,Mybatis官方出品的Mybatis Generator能够自动生成Mapper和XML映射文件,提供基本的CRUD操作方法。
Mybatis Generator生成Entity同时可以生成Example,做为条件对像查询,避免写SQL。Example会跟据字段生成and,or,like等方法,也有eq,lt,gt,le,lt等比较方法和order by排序。
Mybatis Generator生成的SQL语句不提供数据库分页和排序,很多功能实现起来需要插件。我以前也写过分页插件,自定义封装了一个DaoService。在分页插件中增加了like查询,传入Entity跟据字段是否为空做条件用and查询。因为大多情况都是and查询,封装后很多操作不需要写SQL,也不需要用代码判断条件,提高了开发效率。
最近的项目用上了Mybatis Plus,虽说是第一次用,但很多东西与Mybatis Generator相似。Mybatis plus作者说,只在Mybatis上做增强,不做修改。因为这点我很钟意这个框架。
(更多…)随着业务系统越来越复杂,微服务架构成为主流。管理众多微服务的配置是一件头疼的事。在Spring Cloud中有提供配置中心模块,是基于文件管理方式,依赖svn/git,修改配置文件后无法自动同步。
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
与Spring Cloud相比,Apollo是将配置文件存入MySQL数据库中,有WEB管理界面,有权限控制,支持灰度发布,配置回滚及集群和配置文件时实同步。同时也能很好的与Spring Boot、Spring Cloud整合。以下是它的基础模型和架构模块图。
关于Apollo详细设计可参与官方文档:Apollo配置中心设计
Apollo的官方资料写得挺详细,但文档的结构不太符合我的阅读习惯。比如:在介绍一项配置,它列出各种集成方式。我觉得应该分开,基础的,与Spring Boot集成的,与Spring Cloud集成。废话不多说,以下是我的操作回放。
(更多…)两年前,我在这里发布了”JAVA通用验证工具”,并开源共享到 github 上。在之后的项目中,也是有使用的,算得上是经历了线上的考验。与其他如:Spring Validator,Apache Validator相比,主要有几个优点:
1.无第三方依懒引入,更轻量更容易扩展。
2.对于JAVA对象支持分组,根据不同业务场景验证必要字段。
3.对Android提供独立支持,验证返回资源引用ID。
(更多…)
在J2EE开发中,使用浏览器上传文件很简单,服务器用Apache的Commons FileUpload实现就可以了。但是在开发C/S架构的程序时就需要自己处理。用代码实现文件上传需要对表单的multipart/form-data有所了解,(表单默认情况下使用application/x-www-form-urlencoded)。
在multipart/form-data中Content-Type是这样的:
boundary是表示分隔,用于分隔多个文件。格式是 — 后面可以跟随一串随机数。
(更多…)
Spring 4出来很长一段时间了,现在最新稳定版是4.2.4。我把外面做项目常用的框架集成写了一个demo,从请求到保存数据。可以作为项目快速搭建与开发。如果要提高效率和形成团队规范,还需要深度开发。
项目为Maven工程,始用Eclipse创建。导入项目后可能需要一段时间让Eclipse自动下载依赖包。依赖包主要有:Spring、Spring Web、Spring Jdbc、MyBatis、Mybatis Spring、MySQL Connect Java、Apache Common DBCP2、Log4j2。
项目结构如下:
数据库脚本:
(更多…)
之前因为工作需求,开发了一款端口转发工具,实现原理参见:JAVA实现端口转发功能。这段程序只能针对一个端口转发,要实现多个转发功能就需要运行多个程序,所以便开发了新的增强版端口转发工具。
新版端口批量转发工具的配置文件是参考另一款转发工具 (rinetd) 的格式来实现的,完全可以和rinetd配置文件共用。使用格式如下:
使用vmware workstation发现NAT模式端口转发存在一些问题。
其实我要的功能很简单,就一个端口转发。在B机器上安装好虚拟机C,用A机器去连接。因为B机器和A机器是不同网段且不相通(但是A能连接B),所以A连接C需要B转发。使用vmware workstation自带转发实现不了,于是自己写了一个端口转发的小程序。是使用JAVA编写的,能运行于全平台。