分类 后端 中的文章

微信小程序模板消息推送实现案例

模板消息是基于微信的通知渠道,为开发者提供了可以高效触达用户的模板消息能力,以便实现服务的闭环并提供更佳的体验。 想推送模板消息,得满足一些前提条件: 用户在小程序中完成支付后,小程序可以向用户发送模板消息。 用户在小程序中有提交表单的行为,小程序可以向用户发送模板消息。 例如: 3. 用户在……

阅读全文

使用MockMvc在SpringBoot中进行单元测试

在开发好常规的RESTful接口后,难免会依次进行单元测试,一般来说使用Postman即可, 但是依然是不太方便,有没有更方便,更优雅的方式呢? MockMvc org.springframework.test.web.servlet.MockMvc MockMvc是由Spring提供的,作用是在单元测试代码中,伪造一套MVC环境,常见的方法如下: Method Remark perform 执行一个RequestBuil……

阅读全文

Java8 Stream Api使用详解

jdk8发布至今已有几年有余,是一个影响深远且具有革命意义的版本,目前jdk版本已直奔v11.0, 发展之迅速让人始料未及。本文在假设已有 java8 lambda 语法的基础下,通过几个示例,快速上手Stream 流处理相关的 API 使用。 什么是流操作 流操作就是一条流水线,将元素放在流水线上一个个地进行处理: List<User>……

阅读全文

DingTalk::通讯录单向同步实现示例

最近项目中需要实现对接钉钉,并实现单向通讯录同步(钉钉服务器 -> 对接平台)本文通过一个简单的案例快速实现相关的DEMO (本文主要实现与钉钉对接)。 钉钉API:https://open-doc.dingtalk.com/docs/doc.htm?spm=a219a.7629140.0……

阅读全文

SpringMVC实现优雅的API响应结构设计

一个规范、易懂和优雅,以及结构清晰且易于理解的API响应结构,完全可以省去许多无意义的沟通和文档。 预览 操作成功: {"succeed": true,"timestamp": 1525582485337} 操作成功:返回数据 { "succeed": true, "result": { "users": [ {"id": 1, "name": "name1"}, {"id": 2, "name": "name2"} ] }, "timestamp": 1525582485337 } 操作失败: { "succeed": false, "error": { "error_code": 5002, "error_reason": "illegal_argument_error", "error_description": "The String argument[1] must have length; it must not be null or empty" }, "timestamp": 1525582485337 } 实现 定义 ResponseData @Data @Accessors(chain = true) public class ResponseData<R extends Object> implements Serializable { @JSONField(ordinal = 0)……

阅读全文

使用Consul代替Spring Cloud Eureka

随着Eureka 2.0 开源工作宣告停止,其实是可以考虑转战其他方式来实现注册中心了(如:Zookeeper、Redis、Consul等) 本文通过简单的描述,快速将Consul集成到SpringCloud环境中。 Consul环境搭建 官网:https://www.consul.io/ 官网……

阅读全文

开放Spring Cloud Eureka API

一般来说,Eureka 默认提供了一套 UI 界面,但在大多数情况下,由于 UI 风格问题并不适合直接嵌入到业务系统中使用; 本文通过扩展 Eureka 项目,实现相关的自定义接口,以便业务系统集成调用; 1. Eureka Project; <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> @EnableEurekaServer @SpringBootApplication(scanBasePackages = "com.fastjee") public class FastjeeEurekaApplication { public static void main(String[] args) { FastjeeApplication.run(FastjeeEurekaApplication.class, args); } } 2. RESTful API package com.fastjee.eureka.rest; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.netflix.appinfo.AmazonInfo; import com.netflix.appinfo.ApplicationInfoManager; import com.netflix.appinfo.DataCenterInfo; import com.netflix.appinfo.InstanceInfo; import com.netflix.config.ConfigurationManager; import com.netflix.config.DeploymentContext; import com.netflix.discovery.shared.Application; import com.netflix.discovery.shared.Pair; import com.netflix.eureka.EurekaServerContext; import……

阅读全文

使用Sharding-JDBC实现MySQL读写分离

读写分离,简单来说,就是将DML交给主数据库去执行,将更新结果同步至各个从数据库保持主从数据一致,DQL分发给从数据库去查询,从数据库只提供读取查询操作。读写分离特别适用于读多写少的场景下,通过分散读写到不同的数据库实例上来提高性能,缓解单机数据库的压力: Name Remark DQL 数据查询语言,比如……

阅读全文

关于Java代码的一些优化技巧

减少重复计算 for (int i = 0; i < list.size(); i++) { // do something; } for (int i = 0; int len = list.size(); i < len; i++) { // do something; } // 不要觉得麻烦, 尽量减少变量的重复计算, 这在大量数据集合遍历时非常有效. 不要创建大量的对象引用 for (; ;) { Object obj = new Object(); } Object obj = null; for (; ;) { obj = new Object(); } // 能省就省. 卫语句 void fun(Date date) { if (isWorkDay(date)) { syso(date + " is work day."); } else { if (isWorkTime(date)) { syso(date + " is……

阅读全文

Spring Cloud Config 高可用架构

何为高可用? 高可用HA(High Availability)是分布式系统架构设计中必须考虑的因素之一,它通常是指,通过设计减少系统不能提供服务的时间. 假设系统一直能够提供服务,我们说系统的可用性是100%. 如果系统每运行100个时间单位,会有1个时间单位无法提供服务,我们说系统的可……

阅读全文