Spring boot相关实战知识的专栏
文章平均质量分 91
主要分享spring boot相关知识
天涯泪小武
开源贡献者,有代码洁癖。京东coder。
展开
-
开发中大家如何对 JPA 或者 MyBatis 进行技术选型
原文地址:http://www.spring4all.com/question/112lexburner 3天前首先表达个人观点,JPA必然是首选的。个人认为仅仅讨论两者使用起来有何区别,何者更加方便,不足以真正的比较这两个框架。要评判出更加优秀的方案,我觉得可以从软件设计的角度来评判。个人对 mybatis 并不熟悉,但 JPA 规范和 springdata 的实现,设计理念绝对是超前的。软件开转载 2017-12-19 11:48:20 · 9463 阅读 · 8 评论 -
1 Springboot SpringCloud集成OAuth2入门详细教程
springboot集成OAuth客户端、服务端,springboot OAuth详细教程,springboot集成OAuth入门教程原创 2017-10-19 10:29:32 · 42487 阅读 · 18 评论 -
使用idea根据数据库表生成java model类,基于hibernate
很多场景下我们需要根据已有的数据库表,生成对应的java bean,而且还希望生成的java类格式正确、命名规范。使用idea可以轻松的完成这个功能。举例,我新建一个springboot项目,勾选mysql、jpa即可,在idea找到Database界面,新建Data source——MySQL,填写数据连接信息后即可。此时就可以生成简单的pojo类了,注意,此时还没有使用hibernate呢,就原创 2017-10-11 15:43:52 · 11557 阅读 · 1 评论 -
Jpa配置实体类创建时间更新时间自动赋值,@CreateDate,@LastModifiedDate
操作数据库映射实体类时,通常需要记录createTime和updateTime,如果每个对象新增或修改去都去手工操作创建时间、更新时间,会显得比较繁琐。Springboot jpa提供了自动填充这两个字段的功能,简单配置一下即可。@CreatedDate、@LastModifiedDate、@CreatedBy、@LastModifiedBy前两个注解就是起这个作用的,后两个是设置修改人和创建人的原创 2017-09-11 13:14:33 · 23831 阅读 · 2 评论 -
zuul网关Filter处理流程及异常处理
上一篇介绍了java网关Zuul的简单使用,进行请求路由转发和过滤器的基本操作。这一篇主要看一下它的过滤器Filter的工作流程及异常处理。首先看到Filter的四个方法,FilterType,filterOrder,shouldFilter,run。filterType代表过滤类型PRE: 该类型的filters在Request routing到源web-service之前执行。用来实现Auth原创 2017-09-08 14:25:30 · 50588 阅读 · 7 评论 -
独立使用zuul网关分发不同服务的请求、权限控制,非SpringCloud
网关api Gateway的重要性不言而喻,网关负责统一接收所有请求,然后根据不同的规则进行转发到不同的服务。使用网关能够统一的管理请求日志、进行权限控制、过滤等,这样就能避免在每个单体应用中做重复的工作。这一篇主要是讲zuul的独立使用,就是只作为一个独立的项目进行请求转发,而不关联SpringCloud的那一堆Eureka、Ribbon等,因为很多时候我们的项目并不都是基于springclou原创 2017-09-08 10:44:49 · 42519 阅读 · 37 评论 -
Jpa使用说明
jpa使用说明转载 2017-06-10 12:07:28 · 6751 阅读 · 0 评论 -
SpringMVC源码解析,看SpringMVC的工作流程
SpringMVC在使用过程中,大多是使用注解,对它的实现接口之类的关系理解变得模糊, 通过对XML配置的理解,可以理清各个类的关系,譬如控制器类要实现Controller接口。接触SpringMVC,对它的xml文件配置一直比较模模糊糊,最近花了一点时间稍微看了下源代码,再加上调试,开始逐渐理解它,网上的类似的内容有很多,写本文主要是自己加深一下理解。本文适合用过SpringMVC的开发转载 2017-05-03 10:44:53 · 2491 阅读 · 0 评论 -
详解Jpa动态复杂条件查询,查询指定字段、并包括sum、count、avg等数学运算,包括groupBy分组
Jpa是我一直推荐在Springboot及微服务项目中使用的数据库框架,并由于官方的并不是十分友好和易用的api,导致很多人使用起来并不方便,下面就来展示一下我对api进行了封装后的代码。大大减轻了使用难度。效果展示首先我们直接来看最终的结果:譬如有个entity叫PtActivity,它有一个Repository。public interface PtActivityRepos...原创 2019-05-31 18:39:50 · 27977 阅读 · 18 评论 -
axios和Springboot项目交互时跨域处理
跨域本身是个很简单的问题,到处都能找到相关的后台配置教程。多数都是如下,定义个filter,再把filter注册一下就好了。public class CorsFilter implements Filter { @Override public void doFilter(ServletRequest httpRequest, ServletResponse res, Fi...原创 2019-05-27 20:40:31 · 2015 阅读 · 0 评论 -
Springboot分别使用乐观锁和分布式锁(基于redisson)完成高并发防超卖
在电商中经常会有防超卖的需求,本质上是对一条数据的多线程并发情况下的数据安全性进行控制。譬如一个商品goods,库存是100,在多线程都去读取修改的情况下,会产生数据错乱。不加锁的情况我们来看一个简单的例子,有个goods表,里面有个int型字段amount。我们用多线程来频繁修改amount的值,看看结果。 @Transactional(rollbackFor = Except...原创 2019-05-10 15:11:17 · 17030 阅读 · 35 评论 -
SpringBoot 实现JPA的save方法不更新null属性
转载自:https://www.jianshu.com/p/4931fbc52ea1直接调用原生Save方法会导致null属性覆盖到数据库,使用起来十分不方便。本文提供便捷方法解决此问题。核心思路如果现在保存某User对象,首先根据主键查询这个User的最新对象,然后将此User对象的非空属性覆盖到最新对象。核心代码直接修改通用JpaRepository的实现类,然后在启动类标...转载 2019-05-07 18:23:33 · 10184 阅读 · 4 评论 -
Springboot集成sentinel实现接口限流入门
Sentinel是阿里巴巴开源的限流器熔断器,并且带有可视化操作界面。在日常开发中,限流功能时常被使用,用于对某些接口进行限流熔断,譬如限制单位时间内接口访问次数;或者按照某种规则进行限流,如限制ip的单位时间访问次数等。之前我们已经讲过接口限流的工具类ratelimter可以实现令牌桶的限流,很明显sentinel的功能更为全面和完善。来看一下sentinel的简介:https://...原创 2019-05-07 11:40:44 · 34340 阅读 · 15 评论 -
SpringBoot2集成redis,使用lettuce客户端
Springboot集成redis大家都会用,主要就是使用RedisTemplate类来进行各种操作。可能很多人并没有注意,在Springboot2以后,底层访问redis已经不再是jedis了,而是lettuce。至于jedis和lettuce有什么区别呢,对我们的使用有什么影响呢?jedis采用的是直连redis server,在多个线程之间共用一个jedis实例时,是线程不安全的。如...原创 2019-05-05 16:12:19 · 25000 阅读 · 9 评论 -
springcloud gateway代理get正常、post请求报错的问题
在上一篇时,我们在使用gateway的反向代理功能时,发现了一个很严重的问题,那就是通过gateway去访问后端服务时,如果发起的是Get请求,就一切正常,如果是Post请求,就会报错。无论是使用什么filter。java.lang.IllegalStateException: Only one connection receive subscriber allowed. at react...原创 2018-10-24 12:08:23 · 10791 阅读 · 3 评论 -
spring-webflux中Flux<DataBuffer> 转String
Spring WebFlux既支持像Tomcat,Jetty这样的的传统容器(前提是支持Servlet 3.1 Non-Blocking IO API),又支持像Netty,Undertow那样的异步容器。不管是何种容器,Spring WebFlux都会将其输入输出流适配成Flux<DataBuffer>格式,以便进行统一处理。在使用SpringCloud-gateway时,在各个f...原创 2018-10-24 18:09:36 · 26673 阅读 · 20 评论 -
SpringCloud-gateway全局GlobalFilter获取post的请求参数
gateway里面可以自定义普通filter,也可以创建自定义的GlobalFilter。GlobalFilter实际上还是比较常用的,譬如可以在GlobalFilter里做日志处理、认证鉴权等,这里就涉及一个获取到请求参数的问题。用户发起Get、Post请求,经过网关gateway,gateway的GlobalFilter进行拦截——获取参数——处理并包装——转到下一级,我们就来看看该怎...原创 2018-10-25 11:04:29 · 62544 阅读 · 66 评论 -
详解SpringCloud-gateway动态路由两种方式,以及路由加载过程
gateway配置路由主要有两种方式,一种是用yml配置文件,一种是写代码里,这两种方式都是不支持动态配置的。如:下面就来看看gateway是如何加载这些配置信息的。1 路由初始化无论是yml还是代码,这些配置最终都是被封装到RouteDefinition对象中。一个RouteDefinition有个唯一的ID,如果不指定,就默认是UUID,多个RouteDefinitio...原创 2018-10-26 16:21:29 · 151949 阅读 · 30 评论 -
spring cloud网关zuul源码Request生命周期管理
zuul是spring cloud集成的网关(api gateway),主要是做统一的权限控制,路由分发,反向代理和负载均衡。原文链接:http://blog.csdn.net/haha7289/article/details/54312043zuul核心框架zuul是可以认为是一种API-Gateway。zuul的核心是一系列的filters, 其作用可以类比Se转载 2017-04-11 11:10:08 · 5522 阅读 · 0 评论 -
spring cloud网关zuul源码之Filter管理
接上一篇request管理。原文地址:http://blog.csdn.net/haha7289/article/details/54344150zuul支持动加载Filter类文件。实现原理是监控存放Filter文件的目录,定期扫描这些目录,如果发现有新Filter源码文件或者Filter源码文件有改动,则对文件进行编译加载。目前zuul支持使用Groovy编写的Filter。转载 2017-04-11 11:12:12 · 1585 阅读 · 0 评论 -
spring cloud网关zuul之filter注册
原文地址 https://my.oschina.net/u/3300636/blog/851984?nocache=1491877235421zuul开启首先由@EnableZuulProxy 注解是开启zuul的注解。@EnableCircuitBreaker@EnableDiscoveryClient@Target({ElementType.TYPE})@Retention(转载 2017-04-11 11:15:35 · 6598 阅读 · 1 评论 -
zuul微服务网关的常用示例
微服务架构体系中,通常一个业务系统会有很多的微服务,比如:OrderService、ProductService、UserService...,为了让调用更简单,一般会在这些服务前端再封装一层,类似下面这样:前面这一层俗称为“网关层”,其存在意义在于,将"1对N"问题 转换成了"1对1”问题,同时在请求到达真正的微服务之前,可以做一些预处理,比如:来源合法性检测,权限校验,反爬虫之类...传统方式转载 2017-09-25 11:20:17 · 11096 阅读 · 0 评论 -
eureka客户端源码解析
原文:https://blog.tookbra.com/2017/08/25/Spring-Cloud-Eureka-Client-Source/源码目录结构.├── pom.xml└── src ├── main │ ├── java │ │ └── org │ │ └── springframework │ │转载 2017-10-10 16:08:59 · 3421 阅读 · 0 评论 -
zookeeper docker集群配置
本篇讲一下zookeeper在docker中集群搭建方式。先来看看zookeeper的单个Docker配置吧。共包含两个文件,一个Dockerfile,一个sh脚本Dockerfile如下:FROM openjdk:8-jre-alpine# Install required packagesRUN apk add --no-cache \ bash \ su-execE原创 2017-12-19 16:34:43 · 5063 阅读 · 2 评论 -
SpringCloud Feign重试详解
摘要: 今天在生产环境发生了数据库进程卡死的现象,除了sql因为全量更新,没加索引的原因,最主要还是我们的接口的服务器端接口出现问题了。忽视了更新接口的幂等性,以及调用方feign client的重试,导致接口重复执行。万幸的是数据已经修复,花了几个小时跟踪feign和ribbon的源码,把其原理彻底搞明白了。 feign是netflix提供的服务间基于http的rpc调用框架,在spr转载 2018-01-22 14:41:23 · 9914 阅读 · 2 评论 -
springcloud gateway之addRequestParameter详细使用及踩坑注意
SpringCloud的网关gateway提供了多个内置Filter,其中addRequestHeader是添加header的,这个无坑,比较简单。还有一个添加参数的,addRequestParameter,这个就有点问题了。具体往下看。版本如下,请注意Springboot版本,这是本篇Post请求异常的关键。1 对应的uri只能是get请求看一个简单的示例,addReques...原创 2018-10-23 11:47:09 · 12039 阅读 · 0 评论 -
SpringBoot2.0 jpa多数据源配置
随着Springboot升级到2.0,原来1.5.x的Jpa多数据源配置不能用了。现在总结一下Springboot2.0的jpa多数据源配置连接池还是用druid,但是不能用druid的starter了,譬如在1.5.x时用的是<dependency> <groupId>com.alibaba</groupId> <artifa...原创 2017-12-26 18:15:34 · 33404 阅读 · 20 评论 -
Springboot中Hibernate根据表名获取model类
需求是:知道表名,需要获取到该表对应的实体类。为毛有这么奇怪的需求呢,是这样的,在别的文件里,存放了数据表名,和一条数据的json串。我需要根据这些信息,将这条数据通过Hibernate插入到库里。我知道了json串,但不知道把它转成什么样的实体类,所以我需要表名对应的class信息。有了class,就可以使用json工具类将字符串转成对象了。就是这么个功能,方法很简单:@Bean pub...原创 2018-03-02 17:38:02 · 3715 阅读 · 1 评论 -
Springboot集成sqlite数据库,并使用jpa、Hibernate操作sqlite
之前举例使用jpa、Hibernate多是以mysql为例,这次因为需要使用一个内嵌式数据库,选择了sqlite,网上多是讲一些sqlite的api封装的框架。这里我们还是使用jpa、Hibernate来操作sqlite。新建一个Springboot项目,pom如下:<?xml version="1.0" encoding="UTF-8"?><project xmlns="ht...原创 2018-03-05 14:55:00 · 23844 阅读 · 2 评论 -
Springboot2.0中Hibernate默认创建的mysql表为myisam引擎问题
升级到Springboot2.0后,依然是使用jpa、Hibernate来操作mysql,发现Hibernate默认创建的表是myisam引擎,而不是innodb。添加下面的方言即可修改为innodbspring: jpa: database: mysql show-sql: true hibernate: ddl-auto: update na...原创 2018-03-07 11:06:25 · 12044 阅读 · 4 评论 -
SpringCloud重试机制配置
SpringCloud重试retry是一个很赞的功能,能够有效的处理单点故障的问题。主要功能是当请求一个服务的某个实例时,譬如你的User服务启动了2个,它们都在eureka里注册了,那么正常情况下当请求User服务时,ribbon默认会轮询这两个实例。此时如果其中一个实例故障了,发生了宕机或者超时等,如果没有配置启用重试retry策略,那么调用方就会得到错误信息或者超时无响应或者是熔断返回的信息原创 2018-01-22 14:34:44 · 16382 阅读 · 0 评论 -
zuul灰度发布功能实现
灰度发布、蓝绿发布、金丝雀发布各是什么意思,可以看这篇http://www.appadhoc.com/blog/product-release-strategy/。基于eureka、ribbon实现灰度发布,是这一篇要讲的知识。我们要发布版本了,在不确定正确性的情况下,我们选择先部分节点升级,然后让一些特定的流量进入到这些新节点,完成测试后再全量发布。我们知道,在eureka中注册各个服务后,如果原创 2018-01-22 16:59:50 · 14877 阅读 · 9 评论 -
docker部署pinpoint,监控docker中的Springboot项目
pinpoint是一个开源的java监控项目,也是分布式监控项目中比较知名的。 网上有比较多的pinpoint部署指南,但都是基于主机部署的,这一篇主要是讲将pinpoint部署到docker中,并监控同样部署在docker的Springboot项目。 pinpoint包含4个部分,hbase,collector,web,agent。docker部署HBaseDockerfile如下:# DES原创 2017-12-06 10:14:35 · 8960 阅读 · 17 评论 -
springboot根据不同的条件创建bean,动态创建bean,@Conditional注解使用
这个需求应该也比较常见,在不同的条件下创建不同的bean,具体场景很多,能看到这篇的肯定懂我的意思。倘若不了解spring4.X新加入的@Conditional注解的话,要实现不同条件创建不同的bean还是比较麻烦的,可能需要硬编码一些东西做if判断。那么现在有个@Conditional注解后,事情就简单多了。用法很简单,直接上代码。新建一个springboot项目,添加一个Configurati原创 2017-10-11 11:17:39 · 60510 阅读 · 4 评论 -
JPA(hibernate)一对多根据多的一方某属性进行过滤查询
我们经常会碰上某个字段是集合元素(List,Set)的情况,并且我们要过滤出集合中包含某个或某些元素的数据。 譬如一个类User /** * 检索人 */ private Long userId; /** * 省、直辖市集合 */ @ElementCollection @CollectionTable pr原创 2017-11-22 12:24:46 · 14715 阅读 · 1 评论 -
zuul报错java.net.UnknownHostException: 4d59d509898a: Name or service not known
是这样的,eureka、zuul和普通的微服务在本地是OK的,部署到docker后,通过zuul访问某个微服务就报错了。用的是serviceId的方式,在eureka界面也能看到各个微服务都是在线的,没有问题,但就是通过zuul的路由访问时会报错。com.netflix.zuul.exception.ZuulException: Forwarding error2017/11/24 下午9:49:原创 2017-11-25 09:50:39 · 9070 阅读 · 8 评论 -
微服务中网关(API Gateway)的技术选型
用 Spring Cloud 微服务实战中,大家都知道用 Zuul 作为智能网关。API 网关(API Gateway)主要负责服务请求路由、组合及协议转换。下面是大家的总结:一、最佳回答网关的技术选型SpringCloud-Zuul :社区活跃,基于 SrpingCloud 完整生态, 是构建微服务体系前置网关服务的最佳选型.Kong : 基于OpenResty的 API 网关服务和网关服务管理转载 2017-12-07 11:45:17 · 36818 阅读 · 3 评论 -
Zuul超时问题,微服务响应超时,zuul进行熔断
是这样的,今天碰到了微服务响应超时问题,而且超时时间特别短,2秒就超时,zuul就走熔断了。 我采用zuul作为网关,根据不同的访问路径进行微服务的路由,譬如有个服务是user,我访问user服务的某个接口时,该接口执行时间很慢,2秒多,然后还没执行完,zuul就执行熔断了,进入了我配好的ZuulFallbackProvider里。所以来研究一下zuul的超时处理。 前提,zuul和微服务都已经原创 2017-12-11 14:23:48 · 66761 阅读 · 20 评论 -
eureka配置账号密码才能访问
如果配置好了eureka server,默认情况下我们就直接直接访问到eureka的界面了。如果不想让所有人都能访问到eureka的界面,可以加上权限认证,输入账号密码才能访问。方式如下:在eureka的server端配置,pom.xml里加上 org.springframework.boot spring-boot-starter-security 然后在yml里加上原创 2017-12-12 14:14:58 · 18465 阅读 · 2 评论 -
1 springboot项目集成使用disconf,基于docker环境
disconf是一个开源的分布式配置中心(https://github.com/knightliao/disconf),此外还有携程开源的Apollo(https://github.com/ctripcorp/apollo),Apollo要比disconf功能更为丰富、强大一些。disconf比较简单明了,已经能适用于大部分场景了,使用起来比较简单。我打算写篇文章来讲一些disconf在sprin原创 2017-10-16 14:03:22 · 2314 阅读 · 3 评论