分类: Java

Spring Cloud 简介

Spring Cloud 是什么?Spring Cloud 是当下最流行的微服务框架,它为微服务架构中涉及的服务治理、配置管理、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等操作提供了一种简单的开发方式。相比Dubbo、Sofa、ServiceComb等RPC框架它提供的是全套的分布式系统解决方案。它利用自家的Spring Boot的开发便利性简化了分布式系统的基

Spring Cloud 注册中心 Eureka

Spring Cloud 对服务治理做了抽象,因此Spring Cloud支持多种不同的服务治理框架,例如:Eureka、Consul、Zookeeper、Nacos 等等。我们可以切换不同的服务治理实现,而不影响服务注册、服务、调用等功能。下面我们来配置一个Eureka先看看注册中心是什么样的。pom.xml<dependency> <groupId>org.spr

Spring Cloud 注册中心 Eureka(集群和权限)

集群单节点的注册中心实在是不保险,一旦注册中心出问题,整个微服务都受牵连,所以我们接下来要实现多个节点的注册中心,网上很多文章,弄2个节点互相注册,为了体现不一样,我们弄3个节点。权限上一篇的 Eureka 太low了,连个权限验证都没有,如果被人发现了eureka的地址是可以随意向其注册服务的,而且提供的web界面也将随意访问,这一篇给它加上个权限验证。先来实现权限验证,这个可以借助Spring

单例模式

在一些程序设计中,希望对象只有一个实例,这时候就可以使用单例模式。单例模式的实现,在语法上 用一个私有的构造方法来保护类不能在外部被 new 出来,然后提供一个静态方法返回唯一的实例即可。应用场景,例如:系统配置,整个系统有一个配置对象即可,如果有配置修改,通知这个唯一的对象就好了,每次读取配置只需从这个唯一的对象中获取。下面是一些常见的写法,以及优缺点:代码一public class Singl

Java请求RapNet接口查询钻石价格

RapNet的账号开通在国内需要联系香港的办公室,具体信息:Hong Kong & China+852-2805-2620hk@diamonds.net获取钻石价格需要2个接口,一个获取钻石列表,另一个获取钻石的详细信息。通过WebServer获取这种方式除了上面的2个接口外还需要一个接口获取ticket,请求和处理返回值都相对比较麻烦,就放弃了。获取JSON格式数据每次请求携带用户、密码和查询参数,服务端返回json格式的字符串。Java代码:

Java获取微信企业号中的手机号码

在开发的项目中,有工作流审批功能,有些岗位的人员并不是一直在办公室的,这就需要在手机端审批。手机端是在企业号中的应用实现的,登录时需要获取企业员工的手机号,具体代码如下:

Spring MVC Interceptor 实现性能监控

利用Spring MVC 的 Interceptor 实现个简易的性能监控,计算一下每个url的执行时间。在 preHandle 方法中记录当前的时间戳到线程局部变量里,然后在afterCompletion方法中,用当前的时间戳剪掉线程局部变量里的时间戳得出个运行时间,并记录到log里。这只是个简易的性能监控,如果想长期正式的监控性能,请选择其它成熟的产品。Interceptorimport javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.core.NamedThreadLocal;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;public class PerformanceInterceptor implements HandlerInterceptor { private final static Logger LOGGER = LoggerFactory.getLogger(PerformanceInterceptor.class); private NamedThreadLocal<Long> startTimeThreadLocal = new NamedThreadLocal<Long>("performance"); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { startTimeThreadLocal.set(System.currentTimeMillis()); return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { return; } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { long currentTime = System.currentTimeMillis(); long executeTime = currentTime - startTimeThreadLocal.get(); LOGGER.info("uri:{} 执行了 {} 毫秒", request.getRequestURI(), executeTime); }}

Spring Data JPA 通过 Query DSL查询数据

昨天写 JPA的查询方式,里面关于QueryDSL的部分没有写,当时因为一直报错,现在错误解决了,补上 Spring Data JPA 通过 Query DSL 查询的实现。另2篇:Spring Data JPA 的查询方式You need to run build with JDK or have tools.jar on the classpathpom<dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-apt</artifactId></dependency><dependency> <groupId>com.querydsl</groupId> <artifactId>querydsl-jpa</artifactId></dependency><dependency> <groupId>com.sun</groupId> <artifactId>tools</artifactId> <version>1.7</version> <scope>system</scope> <systemPath>${JAVA_HOME}/lib/tools.jar</systemPath></dependency>官网和一些其他示例并没有提及tools,但没有这个会报错的,IDE里面就报了。除了上面的配置还要添加构建插件

JPA 实体继承共用一个表

在用JPA的时候,如果每个实体都有一些共通的属性,例如创建时间,最后修改时间,那可以把这些属性放到一个公共实体里,用 @MappedSuperclass 标记,然后其它实体继承这个类即可。这个是简单的方式,下面说一下真正的实体继承。先说一个场景,开发一个产品实体,过几天产品狗告诉你,有个特殊的产品钢笔,这里有2个特殊的属性,品牌和钢笔的粗细,在你还没发火之前,又告诉你还有另外一个特殊的产品订书器,它有长和宽。按照面向对象的思维,你需要创建另外2个实体然后继承之前的实体来实现。代码如下: