03 2018 档案
摘要:在微服务架构中,存在着那么多的服务单元,若一个单元出现故障,就会因依赖关系形成故障蔓延,最终导致整个系统的瘫痪,这样的架构相较传统架构就更加的不稳定。为了解决这样的问题,因此产生了断路器模式。 什么是断路器 断路器模式源于Martin Fowler的Circuit Breaker一文。“断路器”本身
阅读全文
摘要:flyway是一个开源的数据库迁移工具。类似于数据库的版本控制工具。flyway的数据库修改文件默认放在resource下的db.migration文件夹中,以V{version_number}__{description}的格式命名。各脚本的执行信息会在数据库的schema_version表中做详
阅读全文
摘要:前面的章节中,我们介绍了使用@Async注解来实现异步调用,但是,对于这些异步执行的控制是我们保障自身应用健康的基本技能。本文我们就来学习一下,如果通过自定义线程池的方式来控制异步调用的并发。 定义线程池 在springboot主类中定义一个线程池 使用线程池 在定义了线程池之后,我们如何让异步调用
阅读全文
摘要:准备工作 1.自定义appender的实现 log4j提供的输出器实现自Appender接口,要自定义appender输出到MongoDB,只需要继承AppenderSkeleton类,并实现几个方法即可完成。 在pom.xml中引入下面依赖: 实现MongoAppender 配置log4j.pro
阅读全文
摘要:之前介绍了在《Spring boot中使用log4j》,仅通过log4j.properties对日志级别进行控制,对于需要多环境部署的环境不是很方便,可能我们在开发环境大部分模块需要采用DEBUG级别,在测试环境可能需要小部分采用DEBUG级别,而在生产环境时我们又希望采用INFO级别。这个时候,我
阅读全文
摘要:我们知道,Spring Boot中默认日志工具为logback,但是对于习惯了log4j的开发者,Spring Boot依然可以很好的支持,只是需要做一些小小的配置功能。Spring Boot使用log4j只需要一下几步 引入log4j依赖 在创建Spring Boot工程时,我们引入了spring
阅读全文
摘要:在单数据源的情况下,Spring Boot的配置非常简单,只需要在application.properties文件中配置连接参数即可。但是往往随着业务量发展,我们通常会进行数据库拆分或是引入其他数据库,从而我们需要配置多个数据源,下面基于之前的JdbcTemplate和Spring-data-jpa
阅读全文
摘要:我们在做Web应用的时候,请求处理过程中发生错误是非常常见的情况。Spring Boot提供了一个默认的映射:/error,当处理中抛出异常之后,会转到该请求中处理,并且该请求有一个全局的错误页面用来展示异常内容。springboot默认的错误页面效果如下: 虽然,Spring Boot中实现了默认
阅读全文
摘要:引入依赖 Spring Boot提供的数据访问框架Spring Data Redis基于Jedis。可以通过引入spring-boot-starter-redis来配置依赖关系。 参数配置 在application.properties中加入Redis服务端的相关配置,具体说明如下: 其中sprin
阅读全文
摘要:SpringBoot内部使用Commons Logging来记录日志,但是默认也提供了对常用日志组件的支持,如:Log4j,Logback等。每种Logger都可以通过配置使用控制台或者文件输出日志内容。 日志格式化 默认的日志输出如下: 输出内容元素具体如下: 时间日期-精确到毫秒 日志级别-ER
阅读全文
摘要:在Spring Boot中,我们只需要通过使用@Async注解就能简单的将原来的同步函数变为异步函数,为了让@Async注解能够生效,还需要在Spring Boot的主程序中配置@EnableAsync。实例如下: 创建Task类,Task里面包含三个方法,分别是:doTaskOne,doTaskT
阅读全文
摘要:我们在编写Spring Boot应用中经常会遇到这样的场景,比如:我需要定时地发送一些短信、邮件之类的操作,也可能会定时地检查和监控一些标志、参数等。 创建定时任务 在Spring Boot中编写定时任务是非常简单的事,下面通过实例介绍如何在Spring Boot中创建定时任务,实现每过5秒输出一下
阅读全文
摘要:正则表达式匹配不包含某些字符串: ^((?!@).)*$ //如果包含@字符串会被匹配处理 public static void main(String[] args){ String reg = "^((?!@).)*$"; System.out.println("gdfgfgdffgn".mat
阅读全文
摘要:本文介绍在Spring Boot基础下配置数据源和通过JdbcTemplate编写数据访问的示例。 数据源配置 在我们访问数据库的时候,需要先配置一个数据源,下面分别介绍一下几种不同的数据库配置方式。 首先,为了连接数据库需要引入jdbc支持,在pom.xml中引入如下配置: 嵌入式数据库支持 嵌入
阅读全文
摘要:在开发rest api的时候,为了减少与其他团队平时开发期间的频繁沟通成本,传统做法我们会创建一份RESTful API文档来记录所有接口细节,然而这样的做法有以下几个问题: 1.由于接口众多,并且细节复杂(需要考虑不同的HTTP请求类型、HTTP头部信息、HTTP请求内容等),高质量地创建这份文档
阅读全文
摘要:JavassistProxyFactory利用自己吗技术构建代理对象的实现如下: 看似和使用jdk技术生成代理对象一样,实际上这里的Proxy类不是jdk自带的,而是dubbo自己实现的com.alibaba.dubbo.common.bytecode.Proxy,利用javassist工具生成代理
阅读全文
摘要:所谓启动时服务检查是指Dubbo在启动的时候会检查当前引用的服务是否可用,不可用会抛出异常,阻止程序的初始化,以便能在上线前快速的找到问题,默认的情况下check=true 通过设置check=false,可以关闭启动检查功能,比如在测试的时候,有些服务不关心或则出现了循环依赖必须有一方先启动,这种
阅读全文
摘要:Dubbo有很多的实现采用了代码模式,Dubbo由代理工厂ProxyFactory对象创建代理对象。 ProxyFactory接口的定义如下: @SPI指定默认使用javassist字节码技术来生成代理对象,接口定义了生成代理对象的方法getProxy, 入参是invoker对象,接口定义了获取in
阅读全文
摘要:Dubbo为了实现基于spi思想的扩展特性,特别是能够灵活添加额外功能,对于扩展或则策略选择的设配类能够动态生成。对于一些需求已知的类如Protocal,它们的设配类代码dubbo可以直接的提供,但是dubbo作为一个高扩展性的框架,为了使用户能够添加自己的需求,根据配置动态生成自己的设配类代码,这
阅读全文
摘要:dubbo中SPI接口的定义如下: dubbo默认的情况下,会依次从下面几个文件中读取扩展点。1.META-INF/dubbo/internal/ //dubbo内部实现的各种扩展都放在了这个目录了。2.META-INF/dubbo/。3.META-INF/services/。只有打了@SPI注解的
阅读全文
摘要:dubbo采用微内核+插件体系,设计优雅,扩展性很强。微内核+插件体系是如何实现的呢?想必大家都知道SPI(service provider interface)机制。这种机制的原理是假如我们定义了服务接口标准,可以让厂商无实现。在jdk中,使用ServiceLoader类来实现spi机制的服务查找
阅读全文
摘要:从Spring3.1开始,Spring提供了两个MultipartResolver的实现用于处理multipart请求,分别是:CommonsMultipartResolver和StandardServletMultipartResolver。CommonsMultipartResolver使用co
阅读全文
摘要:Fegin是一个声明似的web服务客户端,它使得编写web服务客户端变得更加容易。使用Fegin创建一个接口并对它进行注解。它具有可插拔的注解支持包括Feign注解与JAX-RS注解,Feign还支持可插拔的编码器与解码器,Spring Cloud 增加了对 Spring MVC的注解,Spring
阅读全文
摘要:一:Ribbon是什么? Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,R
阅读全文
摘要:前面我们介绍了SpringCloud注册中心Eureka,但是存在一个单点故障的问题,一个注册中心远远不能满足实际的生产环境,现在我们介绍一下如何搭建一个Eureka集群。 一:集群环境搭建 我们先建两个注册中心工程,一个叫eureka_register_master,一个叫eureka_regis
阅读全文
摘要:出现上述bug的原因如下: 在默认设置下,Eureka服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为。 禁止方式如下:在application.properties配置文件中增加以下内容,重新启动即可。
阅读全文
摘要:Eureka是SpringCloud Netflix的子模块之一,用于云端的服务发现,服务定位,实现云端中间层服务发现和故障转移。服务注册与发现对于微服务系统来说十分的重要,有了服务注册与发现,就省去了每天改服务调用的配置文件的麻烦。你只需要使用服务的标识符,就是可使用服务。它的功能类似与dubbo
阅读全文
摘要:springCloud是基于SpringBoot的一整套实现微服务的框架。他提供了微服务开发所需的配置管理、服务发现、断路器、智能路由、微代理、控制总线、全局锁、决策竞选、分布式会话和集群状态管理等组件。最重要的是,跟spring boot框架一起使用的话,会让你开发微服务架构的云服务非常好的方便。
阅读全文
摘要:随着系统越来越大,越来越复杂,我们需要在业务方面加上一些监控服务。Metrics作为一款监控指标的度量类库,提供了许多工具帮助开发者来完成自定义的监控工作。 使用Metrics 使用Metrics,只需要在pom文件里面加入一下依赖: Metrics的基本工具 Metrics提供了五个基本的度量类型
阅读全文
摘要:全局配置 meta相关配置 data相关配置 coordinator查询管理的配置选项 retention旧数据的保留策略 shard precreation分区预创建 monitor 控制InfluxDB自有的监控系统。 默认情况下,InfluxDB把这些数据写入_internal 数据库,如果这
阅读全文
摘要:InfluxDB基本概念 数据格式 在 InfluxDB 中,我们可以粗略的将要存入的一条数据看作一个虚拟的 key 和其对应的 value(field value)。格式如下: 虚拟的 key 包括以下几个部分: database, retention policy, measurement, t
阅读全文
摘要:InfluxDB 是用Go语言编写的一个开源分布式时序、事件和指标数据库,无需外部依赖,类似的数据库有Elasticsearch、Graphite等 功能特色 基于时间序列,支持与时间有关的相关函数(如最大,最小,求和等) 可度量性:你可以实时对大量数据进行计算 基于事件:它支持任意的事件数据 主要
阅读全文
摘要:@SpringBootApplication:包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。其中@ComponentScan让Spring Boot扫描Configuration类并把它加入到程序上下文。 @Configura
阅读全文
摘要:什么是 java.awt.headless? Headless模式是系统的一种配置模式。在该模式下,系统缺少了显示设备、键盘或鼠标。 何时使用和headless mode? Headless模式虽然不是我们愿意见到的,但事实上我们却常常需要在该模式下工作,尤其是服务器端程序开发者。因为服务器(如提供
阅读全文
摘要:我们知道,SpringBoot程序的启动很简单,代码如下: 调用SpringApplication的静态方法run,这个run方法会构造一个SpringApplication实例,然后这调用这个实例的run方法就能启动SpringBoot程序,因此如果要分析SpringBoot程序的启动过程,我们就
阅读全文
摘要:spring boot默认web程序启用tomcat内嵌容器tomcat,监听8080端口,servletPath默认为 / 。需要用到的就是端口、上下文路径的修改,在spring boot中其修改方法极其简单,实例如下: 启动程序,日志如下: 可以看出其监听端口8088 自定义tomcat 在实际
阅读全文
摘要:我们常常在代码封板时,使用git 创建一个tag ,这样一个不可修改的历史代码版本就像被我们封存起来一样,不论是运维发布拉取,或者以后的代码版本管理,都是十分方便的 git的tag功能 git 下打标签其实有2种情况 轻量级的:它其实是一个独立的分支,或者说是一个不可变的分支.指向特定提交对象的引用
阅读全文
摘要:所谓的远程调试就是服务端程序运行在一台远程服务器上,我们可以在本地服务端的代码(前提是本地的代码必须和远程服务器运行的代码一致)中设置断点,每当有请求到远程服务器时时能够在本地知道远程服务端的此时的内部状态。下面介绍一下Intellij IDEA下对Springboot类型的项目的远程调试功能。 首
阅读全文
摘要:springboot默认支持两种格式的配置文件:.properties和.yml。其中.properties是属性文件,也是最常用的一种;.yml是yaml格式的文件,yaml是一种简洁的标记语言。例如:在properties文件中定义的spring.data.url,在yaml文件中的定义如下 从
阅读全文
摘要:spring boot在启动过程中增加事件监听机制,为用户功能拓展提供极大的便利,sptingboot支持的事件类型有以下五种: ApplicationStartingEvent ApplicationFailedEvent ApplicationPreparedEvent ApplicationR
阅读全文
摘要:项目构建 我们采用maven构建SpringBoot工程,首先创建一个maven工程,对应的pom文件如下: 创建Application.java 运行main方法,运行结果如下: spring boot已经启动,内嵌tomcat容器,监听为8080端口,一个springboot程序就这么简单的被创
阅读全文