spring
文章平均质量分 74
梦想画家
开源软件爱好者,乐于博客分享,业余时间喜欢跑步和科幻,希望与意趣相投朋友一起学习交流。
展开
-
Spring AbstractRoutingDatasource 实现动态数据源
本文介绍如何使用 Spring AbstractRoutingDatasource 基于上下文动态切换数据源,因此我们会让查找数据源逻辑独立于数据访问之外。数据源上下文AbstractRoutingDatasource 需要信息决定路由到那个数据源,该信息我们称为上下文。可以市任何对象,下面示例我们使用枚举 ClientDatabase 作为上下文:public enum ClientDatabase { CLIENT_A, CLIENT_B}值得注意的是,实际中上下文可以是任何有意.原创 2021-06-27 22:29:11 · 509 阅读 · 1 评论 -
Spring 5 WebFlux入门教程
WebFlux是Spring 5 新增特性,提供响应式web应用。本文我们利用RestController 和 WebClient组件实现简单的响应式Restful应用。Spring WebFlux FrameworkWebFlux内部使用Project Rector并实现了——Flux 和 Mono 。新的框架支持两种编程模型:基于注解方式响应式组件函数式路由和处理本文聚焦基于注解响应式组件。我们需要增加 spring-boot-starter-webflux 依赖,它自动拉取其他依赖.原创 2021-06-20 16:57:40 · 1391 阅读 · 0 评论 -
介绍 Hibernate EntityManager
EntityManager属于Java Persistence API的一部分. 它主要实现了JPA 2.0规范定义的编程接口和生命周期规则,而且通过EntityManager api 可以访问Persistence Context。本文我们介绍EntityManager的配置、类型以及其API.EntityManager配置引入依赖首先我们引入hibernate依赖:<dependency> <groupId>org.hibernate</groupId&.原创 2021-06-19 12:16:06 · 2808 阅读 · 0 评论 -
Spring启动时运行自定义业务
在Spring应用启动时运行自定义业务的场景很常见,但应用不当也可能会导致一些问题。基于Spring控制反转(Inverse of Control)功能用户几乎不用干预bean实例化过程,对于自定义业务则需要控制部分流程及容器,因此值得须特别关注。1. Spring启动时运行自定义业务我们不能简单包括自定义业务在bean的构造函数或在实例化任何对象之后调用方法,这些过程不由我们控制。请看示例:@Componentpublic class InvalidInitExampleBean { @原创 2021-04-07 17:39:55 · 523 阅读 · 1 评论 -
Spring FactoryBean实战教程
Spring Bean容器中有两者类型bean:普通bean和工厂bean。前者Spring直接使用,而后者能产生被框架管理的对象。我们可以实现org.springframework.beans.factory.FactoryBean 接口构建工厂bean。1. 基本工厂bean2.1 实现FactoryBean首先看FactoryBean接口定义:public interface FactoryBean { T getObject() throws Exception; Class原创 2021-03-31 21:25:38 · 361 阅读 · 0 评论 -
Spring5.1新特性—接口驱动开发Controller
本文介绍Spring MVC新特性,使用java接口定义web请求。1. 概述通常在SpringMVC中定义Controller,在其方法上使用不同的注解用于描述请求URL入口地址,HTTP请求方法,路径变量等。举例,我们在普通方法上增加@PostMapping("/save/{id}"),指定请求地址和路径变量:@PostMapping("/save/{id}")@ResponseBodypublic Book save(@RequestBody Book book, @PathVariable原创 2021-03-14 11:44:12 · 390 阅读 · 0 评论 -
Spring Boot 运行初始化代码
实际应用通常需要在应用启动后实现一定业务逻辑,Spring Boot提供了几种方式实现,本文分别进行介绍并对比其中的差异。1. 环境准备Spring Boot是一个开发框架,当启动时需要一定启动时间。如果在任何构造函数中实现一些初始化代码,可能会遇到其依赖的对象还没有被初始化。我们讨论的问题就是在Spring context初始化之后,运行自定义初始化代码。Spring Boot提供了几种方式实现,下面首先搭建一个示例工程。启动类的非常简单:@SpringBootApplicationpubli原创 2020-11-27 16:25:13 · 846 阅读 · 0 评论 -
Spring访问Apache kafka快速入门
Apache kafka是分布式、容错流程处理系统。本文介绍Spring集成Kafka以及其提供对Kafka Java Client Api的抽象封装。Spring Kafka利用KafkaTemplate发送消息,@KafkaListener注解消费消息,从而实现模板化编程模式,简化Java对Kafka交互访问。1. 环境及依赖读者可以参照官网进行安装,也可以通过docker快速搭建。spring-kafka需要pom.xml中增加依赖:<dependency> <gro原创 2020-11-26 16:41:22 · 430 阅读 · 0 评论 -
对比 Netflix Feign 和 OpenFeign
对比 Netflix Feign 和 OpenFeign本文主要描述介绍 Netflix Feign 和 OpenFeign 之间的差异,并比较一下Spring Cloud OpenFeign和使用Spring Cloud Netflix Feign的实现方式。1. FeignFeign提供注解支持,仅通过接口实现客户端,使得写web服务客户端更加容易。最早Feign是有Netflix 公司发布,作为Netflix OSS项目一部分。现在Feign已经是开源项目。1.1 增加依赖首先在pom.xm原创 2020-10-27 11:43:38 · 3347 阅读 · 0 评论 -
Spring Boot Actuator自定义健康检查
Spring Boot Actuator自定义健康检查健康检查是Spring Boot Actuator中重要端点之一,可以非常容易查看应用运行至状态。本文在前文的基础上介绍如何自定义健康检查。1. 概述本节我们简单说明下依赖及启用配置,展示缺省健康信息。首先需要引入依赖: compile("org.springframework.boot:spring-boot-starter-actuator")现在通过http://localhost:8080/actuator/health端点进行验证:原创 2020-10-05 21:43:30 · 4456 阅读 · 0 评论 -
Spring Boot 2 Actuator监控系统
Spring Boot 2 Actuator监控系统本文介绍Spring Boot2 Actuator,首先介绍基础概念,接着学习如何使用、配置、扩展这个监控工具。1. 什么是 ActuatorActuator提供产品级的功能特性,使得监控应用、收集指标和流量、数据库状态变得非常简单。该库的主要优势是能够获得产品级工具,无需自己实际实现。主要用于暴露正在运行系统的操作信息,包括健康状态、指标信息、系统及环境信息等。可以使用HTTP或JMX方式进行通信交互。只要加入依赖,默认提供几个健康端点可用,对于原创 2020-10-05 20:57:22 · 1914 阅读 · 1 评论 -
Spring YAML配置
Spring YAML配置使用yaml配置文件是Spring多种配置方式之一,本文介绍使用yaml配置Spring boot多种profile。1. Spring YAML文件Spring profile可以让Spring应用针对不同环境定义不同的属性。下面是一个简单yaml文件包括两个profile,三个横杠分离两个profile,表示下一个profile开始,所有profile可以在相同yaml文件中描述。application.yml文件的相对路径为:/myApplication/src/ma原创 2020-09-26 17:05:49 · 1853 阅读 · 0 评论 -
Spring Boot 启用 http2 协议
Spring Boot 启用 http2 协议HTTP2是万维网(WWW)发布的HTTP网络协议主流版本,也是当前HTTP协议的最新版本(1997年发布的HTTP 1.1)。它来源于SPDY协议,最初由谷歌开发。1. HTTP2的优势所有主流的浏览器,如Chrome, Opera, Firefox, Safari, Edge浏览器都支持这个协议。相对于HTTP1.1协议,HTTP2的优势主要包括下面几点。1.1 多路复用和并发性一般渲染HTML页面可能需要JS, CSS,图像等多个资源文件,需要原创 2020-09-02 16:56:30 · 11165 阅读 · 1 评论 -
Spring 注入static属性值
Spring 注入static属性值本文介绍Spring中如何从属性文件给static字段注入值。实际应用中一些工具类中static属性值需读取配置文件,实现该功能可以让工具类提供静态方法更易使用。1. 问题首先在属性文件中定义属性:name = Inject a value to a static field然后给实例变量注入值,通常在字段上使用@Value注解:@Value("$...原创 2020-04-10 08:44:09 · 3264 阅读 · 0 评论 -
Spring 条件Bean配置实现
Spring 条件Bean配置实现本文介绍Spring 4引入的一个新特性,条件实例化Bean。我们首先了解下Spring4之前的实现方式,接着学习Spring4 提供的Condition接口和 @Conditional注解。1. 概述有时需要根据环境创建依赖注入bean,环境可能是正在运行的操作系统、或应用服务器等。Bean配置也可能依赖具体哪个Java版本,环境变量的属性值,或你的应用正...原创 2020-03-26 22:20:49 · 1335 阅读 · 0 评论 -
介绍Jackson JsonParser解析json
介绍Jackson JsonParser解析json前文介绍了通过JsonNode解析json,本文深入底层工具JsonParser的用法。1. 概述实际应用中经常需要解析json数据,如查询NoSql数据库时响应数据格式通常为Json格式。JsonNode可以非常方便地实现,JsonParser类是底层JSon解析器,类似于Java使用stAx解析xml,但JsonParser仅仅解析Js...原创 2020-03-14 16:39:08 · 14940 阅读 · 1 评论 -
使用Spring Expression Language (SpEL)解析表达式
使用Spring Expression Language (SpEL)解析表达式Spring Expression Language (SpEL) 是强大的表达式语言,支持查询、操作运行时对象图,以及解析逻辑、算术表达式。SpEL可以独立使用,无论你是否使用Spring框架。本文尝试通过多个示例使用SpEL,探索其强大能力。1. 环境准备引入依赖:compile group: 'org....原创 2020-02-27 12:08:08 · 9645 阅读 · 0 评论 -
Spring @PostConstruct 和 @PreDestroy 注解
Spring @PostConstruct 和 @PreDestroy 注解本文介绍Spring @PostConstruct 和 @PreDestroy 注解,主要实现Bean在初始化之后、销毁之前执行自定义业务。1.概述Spring负责管理Bean的初始化和销毁,但同时也提供方式让我们在bean初始化之后、销毁之前执行特定业务。之前一般需要实现相应接口实现,InitializingBea...原创 2020-01-06 14:12:57 · 2242 阅读 · 1 评论 -
Spring Data JPA 实现批量插入
Spring Data JPA 实现批量插入数据库操作是非常昂贵的,我们可以通过采用批量操作提升性能并维护一致性。本文通过示例说明Spring Data JPA的批量操作。1. 环境准备1.1. 依赖<dependency> <groupId>org.springframework.boot</groupId> <artifactId&...原创 2019-12-31 15:17:34 · 18484 阅读 · 1 评论 -
Spring Data Redis 教程
Spring Data Redis 教程本文我们介绍Spring Data Redis,它是对流行的内存数据库Redis在Spring data 框架下的抽象。Redis使用键值对数据结构持久化数据,可以作为数据库、缓存、消息代理等。我们能够使用Spring data通用模式(template等),同样也具有Spring data传统的简单性。1. 环境配置1.1. maven 依赖首...原创 2019-12-24 19:16:42 · 478 阅读 · 0 评论 -
使用Spring AMQP进行消息传递
使用Spring AMQP进行消息传递本文讨论使用Spring AMQP框架实现AMQP消息通信。先介绍一些消息通信核心概念,然后通过一个实际示例进行实战。1. 核心概念1.1. 消息传输消息传输是应用间进行消息通信的技术,基于异步消息传输代替基于请求-响应的同步架构。消息的生产者和消费者被中介消息层(也称为消息代理)解耦。消息代理具有消息持久化、消息过滤以及消息转换等特性。消息传递键间...原创 2019-12-15 20:44:43 · 1096 阅读 · 0 评论 -
Apache Camel入门教程
Apache Camel入门教程本文我们学习Apache Camel,介绍基本概念并重点探讨消息路由。从基本概念和术语开始,然后通过介绍两种方式定义路由————java dsl 和 Spring dsl.示例主要定义一个路由,实现扫描源文件夹并移动文件至目标文件夹,同时给每个文件名增加时间戳前缀。1. Apache Camel介绍Apache Camel是开源集成框架,旨在使集成系统变得简...原创 2019-11-27 17:07:54 · 9579 阅读 · 0 评论 -
介绍JPA的Many-To-Many 关系
介绍JPA的Many-To-Many 关系本文我们讨论JPA中多种方式处理多对多关系。为了方便阐述,使用大家熟悉的场景,学生、课程以及两者之间不同的关系。同时示例代码也不用过多的属性,仅展示核心的配置。1. 多对多基础1.1. 数据库建模关系是两个类型实体之间的连接。在多对多情况下,两边都能关联多个实例。注意,实体类型可能与其自身存在关系。例如当建模家谱时,每个节点都是一个人实例,如果...原创 2019-11-23 17:04:41 · 5649 阅读 · 0 评论 -
Spring 事务传递与隔离
Spring 事务传递与隔离本文讨论下Spring注解@Transactional 及其隔离(isolation)和传播(propagation)属性的设置.1. @Transactional注解@Transactional注解可以用在数据库事务操作的方法上。并可以设置事务的相关属性:隔离属性(isolation), 超时属性(timeout), 只读属性(read-only)以及回滚条件,...原创 2019-10-27 14:53:23 · 805 阅读 · 0 评论 -
RestTemplate使用JSON发送Post请求
RestTemplate使用JSON发送Post请求本文我们说下如何使用Spring的 RestTemplate调用post请求,发送json内容。1. 定义服务端web接口1.1. 定义业务接口先定义Person实体类表示post请求的数据:public class Person { private Integer id; private String name; ...原创 2019-09-01 16:56:44 · 78157 阅读 · 1 评论 -
Spring 应用访问Classpath路径下的文件
Spring 应用访问Classpath路径下的文件本文我们了解下spring多种方式访问classpath路径下文件。1. 使用ResourceResource接口是对底层资源的抽象。提供以统一的方式操作各种文件资源。首先我们看获得Resource实例的不同方法。1.1. 手工获取可以简单使用ClassPathResource类访问classpath路径下文件:public Reso...原创 2019-09-07 09:46:13 · 8761 阅读 · 0 评论 -
RestTemplate简明教程
RestTemplate简明教程本文我们学习Spring REST 客户端 – RestTemplate,包括其各种操作如何使用。1. 使用GET方法获取资源示例中使用到的Foo实体类定义:@Datapublic class Foo { private long id; private String name; public Foo() { su...原创 2019-09-11 21:02:10 · 1542 阅读 · 0 评论 -
Spring Boot TestRestTemplate教程
Spring Boot TestRestTemplate教程本文介绍 Spring Boot TestRestTemplate。建议阅读之前先阅读RestTemplate简明教程,TestRestTemplate可认为是RestTemplate有吸引力的替代方案。1. maven依赖使用TestRestTemplate之前需要加入相应依赖:<dependency> &l...原创 2019-09-11 22:05:00 · 5321 阅读 · 0 评论 -
Spring Batch 读数据库教程
Spring Batch 读数据库教程实际Spring Batch项目中从数据库中读取信息很常用,本文介绍如何从数据库中读取数据,通过游标或分页方式读取。示例需求说明示例场景是在线学习应用,通过Spring Batch从数据库中导出学生信息,学生表的字段如下:email_address 列为学生邮件地址 contains the email address of the student....原创 2019-10-01 21:42:23 · 1919 阅读 · 0 评论 -
Spring Batch 写数据库教程
Spring Batch 写数据库教程上文我们学习如何读数据库,本文我们看如何通过Spring Batch写数据库。1.需求及环境准备1.1. 示例需求说明需要实现把在线学习系统中的学生信息通过Srping job写入数据库,单个学生信息类如下:学生姓名、电子邮件、已购学习包。写数据库之前,我们需要提供输入数据组件。本例我们使用StudentDto对象,其包括单个学生信息:@Datap...原创 2019-10-03 10:45:18 · 2329 阅读 · 0 评论 -
Spring Security Authentication Provider
Spring Security Authentication Provider 介绍本文介绍spring security如何相比简单的UserDetailService上实现灵活的认证。Authentication Providerspring security提供了多种执行认证方式,但都遵循一个简单的约定——AuthenticationProvider处理认证请求,然后返回授信...原创 2018-04-05 09:20:37 · 4835 阅读 · 2 评论 -
Spring Data JPA 分页教程
Spring Data JPA 分页教程分页查询避免一次性加载过多信息至内存,Spring Data JPA 分页功能非常强大且简单。本文带你一起了解如何使用。1. 分页实现对数据库记录进行分页查询需要下面步骤:获得包括分页请求信息的Pageable对象把分页对象作为参数传给相应的repository 方法下面看看如何获得分页请求对象。2. 分页对象我们可以通过两种方法获取分页...原创 2019-08-27 12:55:19 · 4498 阅读 · 3 评论 -
Spring mvc展示RSS Feed
Spring mvc展示RSS Feed本文介绍如何使用Spring mvc及AbstractRssFeedView 类构建简单Rss Feed。同时实现简单REST API发布feed。1. RSS FeedFeed:信源,理解成信息的源泉,英文是feed。信息发布网站将网站全部或者部分信息整合到一个 RSS 文件中,这个文件就被称之为 feed 。信源中包含的数据都是标准的 XML 格...原创 2019-08-24 21:34:16 · 543 阅读 · 0 评论 -
spring 集成 Orika Bean映射框架
spring 集成 Orika Bean映射框架前文介绍了Orika,本文介绍如何在spring框架中集成使用。spring中注册与spring 集成仅需定义统一的mapperFactory,然后把需要转换的bean依次注册至mapperFactory。package com.mytutorial;import ma.glasnost.orika.MapperFacto...原创 2018-06-15 18:11:21 · 1932 阅读 · 0 评论 -
Spring Security Basic 认证
Spring Security Basic 认证本文介绍如何在spring security中搭建、配置、自定义Basic认证。读者需要在spring mvc 基础上进行配置测试。Spring Security配置使用java config方式配置如下:@Configuration@EnableWebSecuritypublic class CustomWebSecurit...原创 2018-06-07 22:24:12 · 8160 阅读 · 0 评论 -
Spring DATA JPA 配置多数据源
Spring DATA JPA 配置多数据源本文我们通过一个简单示例说明如何在spring data jpa中配置多数据源。示例实体首先,我们创建两个简单实体,每个独立存储在不同数据库中。 第一个是User:package org.dataz.persistence.multiple.model.user;@Entity@Table(schema = "spring_j...原创 2018-06-20 18:03:11 · 15775 阅读 · 4 评论 -
获取所有spring管理的bean
获取所有spring管理的bean #本文我们探索使用不同的方式获取spring容器中所有bean。## IOC容器 ##bean是基于spring应用的基础,所有bean都驻留在ioc容器中,由容器负责管理bean生命周期有两种方式可以获取容器中的bean:- 使用ListableBeanFactory接口- 使用Spring Boot Actuator## 使用L...原创 2018-05-26 20:52:52 · 11002 阅读 · 0 评论 -
spring 和 spring boot 中属性配置
spring 和 spring boot 中属性配置本文我们介绍如何在spring中配置和应用属性——通过xml的 或java Configuration 的@PropertySource。在Spring 3.1之前,将新的属性文件添加到Spring中及使用属性值并不是那么灵活和健壮。从Spring 3.1开始,新的Environment 和 PropertySource 抽象已经简化整...原创 2018-05-25 19:41:38 · 2360 阅读 · 0 评论 -
spring Assert教程
spring Assert教程本文介绍spring Assert类,并通过示例说明如何使用。Assert类目的Spring Assert类帮助我们校验参数。通过使用Assert类方法,我们可以写出我们认为是正确的假设,反之,会抛出运行时异常。每个Assert的方法可以与java assert表达式进行比较。java assert表达式在运行时如果条件校验失败,则抛出Error,...原创 2018-04-30 22:21:05 · 9916 阅读 · 1 评论 -
spring security防止恶意登录
spring security防止恶意登录本文我们使用spring security提供一个基本的解决方案防止恶意登录。 简单地说,我们记录来自同一IP的登录失败次数,如果超过设定的数量,在24小时内被阻止登录。AuthenticationFailureEventListener我们定义AuthenticationFailureEventListener,监听Authentica...原创 2018-04-05 11:53:59 · 4647 阅读 · 0 评论