标签: java

  • Sharding JDBC Demo 2.0 (主从版)

    从今年初接触Sharding JDBC 4.0到现在,近一年了,用来做日志和消息分表一直运行,没什么大的问题。前些天生产新上了一个服务,是因为Sharding JDBC把select for update语句解析为查询,在从库中执行,因为从库是只读权限所以报错。

    之前没在测试环境发现这个问题,是因为测试环境数据库没有主从。想起当时刚接触Sharding JDBC写的Demo,于是整理一番,重新拉分支,并完善整个流程,模拟真实场景。

    (更多…)
  • Feign设置header无效

    把原生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 Generator,你好Mybatis Plus

    很久以前就使用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上做增强,不做修改。因为这点我很钟意这个框架。

    (更多…)
  • 配置中心之Apollo

    随着业务系统越来越复杂,微服务架构成为主流。管理众多微服务的配置是一件头疼的事。在Spring Cloud中有提供配置中心模块,是基于文件管理方式,依赖svn/git,修改配置文件后无法自动同步。

    Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。

    与Spring Cloud相比,Apollo是将配置文件存入MySQL数据库中,有WEB管理界面,有权限控制,支持灰度发布,配置回滚及集群和配置文件时实同步。同时也能很好的与Spring Boot、Spring Cloud整合。以下是它的基础模型和架构模块图。

    关于Apollo详细设计可参与官方文档:Apollo配置中心设计

    Apollo的官方资料写得挺详细,但文档的结构不太符合我的阅读习惯。比如:在介绍一项配置,它列出各种集成方式。我觉得应该分开,基础的,与Spring Boot集成的,与Spring Cloud集成。废话不多说,以下是我的操作回放。

    (更多…)
  • [原创]通用验证工具2.0

    两年前,我在这里发布了”JAVA通用验证工具”,并开源共享到 github 上。在之后的项目中,也是有使用的,算得上是经历了线上的考验。与其他如:Spring Validator,Apache Validator相比,主要有几个优点:
    1.无第三方依懒引入,更轻量更容易扩展。
    2.对于JAVA对象支持分组,根据不同业务场景验证必要字段。
    3.对Android提供独立支持,验证返回资源引用ID。
    (更多…)

  • 解析HTTP协议实现文件上传

    在J2EE开发中,使用浏览器上传文件很简单,服务器用Apache的Commons FileUpload实现就可以了。但是在开发C/S架构的程序时就需要自己处理。用代码实现文件上传需要对表单的multipart/form-data有所了解,(表单默认情况下使用application/x-www-form-urlencoded)。

    在multipart/form-data中Content-Type是这样的:

    boundary是表示分隔,用于分隔多个文件。格式是 — 后面可以跟随一串随机数。
    (更多…)

  • J2EE基础框架集成

    Spring 4出来很长一段时间了,现在最新稳定版是4.2.4。我把外面做项目常用的框架集成写了一个demo,从请求到保存数据。可以作为项目快速搭建与开发。如果要提高效率和形成团队规范,还需要深度开发。
    项目为Maven工程,始用Eclipse创建。导入项目后可能需要一段时间让Eclipse自动下载依赖包。依赖包主要有:Spring、Spring Web、Spring Jdbc、MyBatis、Mybatis Spring、MySQL Connect Java、Apache Common DBCP2、Log4j2。

    项目结构如下:
    20151220132534
    数据库脚本:
    (更多…)

  • 端口批量转发工具v1.1

    之前因为工作需求,开发了一款端口转发工具,实现原理参见:JAVA实现端口转发功能。这段程序只能针对一个端口转发,要实现多个转发功能就需要运行多个程序,所以便开发了新的增强版端口转发工具。

    新版端口批量转发工具的配置文件是参考另一款转发工具 (rinetd) 的格式来实现的,完全可以和rinetd配置文件共用。使用格式如下:

    listenIP listenPort destinationIP destinationPort
    参数说明:
    listenIP:本地监听网卡地址,输入0.0.0.0接受所有连接
    listenPort:本地监听端口
    destinationIP:转发目标地址
    destinationPort:转发目标端口

    (更多…)

  • JAVA实现端口转发功能

    使用vmware workstation发现NAT模式端口转发存在一些问题。

    1.在windows系统下虚拟XP,在XP中使用VPN,然后用ccproxy架设代理。虚拟xp使用的是NAT模式连网,使用vmware workstation自带的端口转发工具设置808端口转发(ccproxy代理端口)不能上网。

    2.在centos系统下vmware workstation的网络工具中,没有NAT端口转发选项。手动更改配置文件实现端口转发失败。

    其实我要的功能很简单,就一个端口转发。在B机器上安装好虚拟机C,用A机器去连接。因为B机器和A机器是不同网段且不相通(但是A能连接B),所以A连接C需要B转发。使用vmware workstation自带转发实现不了,于是自己写了一个端口转发的小程序。是使用JAVA编写的,能运行于全平台。

    (更多…)