在spring boot三分钟上手无界流处理系统Spark Streaming,并实现流式点赞统计

Read more   2019/7/8 posted in  三分钟系列 Spring Boot

在spring boot中三分钟上手阿里云日志服务Log Service

虽然可以自行搭建elk等日志系统,但是日志系统特别耗费系统资源,相对于阿里云提供日志服务,自行搭建的机器成本和运维成本较高,一般可以直接选择使用阿里云的日志服务

先来看一张阿里云日志服务的架构图

从上面这张图可以看到这个阿里云的日志服务不仅支持多个数据源,同时在日志服务的基础上衍生出不少数据二次加工的功能,比如MacCompute、Spark Streaming等

创建案例项目

Read more   2019/5/27 posted in  三分钟系列 Spring Boot PHP

在idea中三分钟搭建spring boot框架源码阅读环境

spring boot是基于spring framework封装的,所以spring boot框架的源码主要就是spring framework框架

下载源码

执行命令

git clone https://github.com/spring-projects/spring-framework.git

下载源码,效果如下:

导入idea

在idea中打开项目,然后gradle会自动完成依赖下载

Read more   2019/5/12 posted in  Spring Boot 三分钟系列

在spring boot中集成微服务网关系统Spring Cloud Zuul

Read more   2019/5/8 posted in  Spring Boot

在spring boot中3分钟上手阿里巴巴服务熔断系统sentinel

一直在用hystrix做熔断降级,但是无奈hystrix官方已经不再维护了,sentinel背后是阿里巴巴公司,并且一直在维护sentinel,所以先了解下,hystrix不够用时,可以换成sentinel

并且特性丰富,这里就使用如下两个核心功能

  1. 熔断
  2. 流控

启动Sentinel控制台

sentinel的控制台是由spring boot开发,特殊需求可以修改源码定制,源码参考:sentinel-dashboard
可以使用docker一键启动控制台
编写sentinel-dashboard的Dockerfile

FROM openjdk:8-jdk-alpine

ADD https://github.com/alibaba/Sentinel/releases/download/1.6.0/sentinel-dashboard-1.6.0.jar /sentinel-dashboard-1.6.0.jar
ENTRYPOINT ["java", "-Dserver.port=8080", "-Dcsp.sentinel.dashboard.server=localhost:8080", "-Dproject.name=sentinel-dashboard", "-jar", "/sentinel-dashboard-1.6.0.jar", "-Dfile.encoding=utf-8"]

构建sentinel-dashboard镜像:docker build -t sentinel-dashboard . 然后启动

docker run --name sentinel-dashboard \
    -it --rm -p 8719:8719 -p 8780:8080 sentinel-dashboard

其中8080是sentinel web控制界面端口,8719是sentinel应用端和控制台通信端口,参考配置控制台信息

打开 本机ip:8780 查看效果,默认的用户名密码都是 sentinel

Read more   2019/4/30 posted in  Spring Boot 三分钟系列

基于顺丰同城接口编写sdk,java三方sdk编写思路

由于公司外卖业务需要用到顺丰的配送体系,技术上需要对接顺丰
个人比较感兴趣,但是顺丰没有提供sdk,所以研究下自己写了一个

完整代码已上传github 🎉:https://github.com/neatlife/spring-boot-sfcity

技术选型

三方sdk编写有两种实现方式

  1. 不依赖框架,更通用,但是集成成本较高
  2. 依赖框架,比如spring boot,这样使用起来效率更高

为了提高使用效率,这里选择基于spring boot框架进行编写

前期准备

有很多基于spring boot的sdk了,骨架就不需要自行搭建了,找了下面几个进行参考

  1. https://github.com/jibaole/spring-boot-starter-alimq
  2. https://github.com/spring-projects/spring-data-redis

研究api文档

顺丰同城api文档地址:http://commit-openic.sf-express.com/open/api/docs/index#/apidoc

目前顺丰同城的开发者api个人可以注册,注册后可以设置回调地址
image-20190425171710542

Read more   2019/4/26 posted in  Spring Boot

基于spring boot框架进行二次封装,微型框架编写思路

目标:减少重复代码,提高开发效率,项目地址:https://github.com/neatlife/jframework

欢迎star,欢迎pr(求star, 求star, 求star)

可封装功能列表

E文 功能 目前作用
controller 控制器父类 简化控制器里的常见操作
exception 异常 统一全局业务异常操作
handler 异常拦截 全局异常拦截到日志里
http 请求响应实体 统一全局响应实体
hystrix hystrix事件拦截 熔断时发送报警邮件
jpa jpa非业务重复代码封装 自动给deleted_at, updated_at, created_at赋值
json 响应json数据的二次处理 自动格式化金额小数位数
listener spring boot框架事件 在框架启动时给util注入service实例
logback 自定义logback日志输出 将日志输出到elk的redis,方便elk统一进行日志处理
model 基础jpa实体 包含deleted_at, updated_at, created_at字段的实体
redis 自定义redis序列化和反序列化操作 使用GenericJackson2JsonRedisSerializer序列化redis值,提高可读性
request 自定请求数据的解析 处理json请求
springfox 自定义springfox文档解析 ApiClass支持文档描述引用
util 常用工具收集 比如json, http请求等常用工具类
validator 请求参数自定义校验 检查参数长度
apiversion 支持不同的api的版本到不同的控制器逻辑 参考 MainController
Read more   2019/4/24 posted in  Spring Boot

参数调优

参考:https://github.com/gudaoxuri/dew/blob/spring-boot-1.x/docs/src/main/asciidoc/_chapter/best-practices.adoc

谨防被删,以下做了备份

最佳实践

JDBC框架的选择

主流JDBC框架有Hibernate、MyBatis、Spring JDBC Template、Ebean、DBUtils等,Dew基于Spring Boot,所以对于这些框架都提供了很好的兼容。那么如何选择呢?

  • 先说Hibernate,如果你的数据表结构与对象模型基本吻合,那么使用JPA会带来很大的便捷,推荐Hibernate
  • 如果你的数据表结构与对象模型严重不吻合或是你希望对SQL有更多主动权(SQL优化、复杂查询等),那JPA就没什么优势了,这时:
    • 如果你追求极简、不需要ORMPPING,那么DBUtils会是最佳选择
    • 如果你喜欢敏捷开发,推崇充血模型,那么尝试一下Ebean吧,与Play!结合最合适不过
    • 如果你既要有一定的ORMPPING能力,又希望自己写SQL,那么MyBatis会是不错的选择
    • 如果你使用了Spring,希望框架简单些,可以接受自己写ORMPPING,未来无切换关系型数据库的计划,那么Spring JDBC Template将是个很好的选择
Read more   2018/10/27 posted in  Spring Boot

shell脚本启动springboot

mrun() {
    port="-Dserver.port=$1"
    env="-Denv=local"
    memory="-Xms64m -Xmx128m"
    yourkit="-agentpath:/Applications/YourKit-Java-Profiler-2018.04.app/Contents/Resources/bin/mac/libyjpagent.jnilib"
    xrebel="-javaagent:/Users/suxiaolin/develop/xrebel/xrebel.jar"
    command="mvn spring-boot:run -Dspring-boot.run.jvmArguments=\"$memory $env $port $yourkit $xrebel\""
    echo "command: $command"
    sh -c $command
}

brun() {
    port="8080"
    if [ $1 = "order" ]                                                                                                                                                                                                                                                                    
    then
        port=8035
    elif [ $1 = "gateway" ]
    then
        port=8041
    fi  
    mrun $port
}
mntfs() {
    deviceNode=`diskutil info /Volumes/$1 | grep -oh "/dev/.*"`
    hdiutil eject "/Volumes/$1"
    sudo mkdir /Volumes/$1
    sudo mount_ntfs -o rw,nobrowse /dev/$deviceNode /Volumes/$1/
}

dattr() {
    xattr -l $1
    xattr -d com.apple.FinderInfo $1
}
2018/5/20 posted in  Spring Boot