SpringBoot与缓存、消息、检索、任务、安全与监控
一、Spring抽象缓存
Spring从3.1开始定义了org.springframework.cache.Cache和org.springframework.cache.CacheManager接口来统一不同的缓存技术;并支持使用JCache(JSR-107)注解简化开发。
Cache接口为缓存的组件规范定义,包含缓存的各种操作集合。
Cache接口下Spring提供了各种Cache的实现,如RedisCache、EhCacheCache、ConcurrentMapCache等。
每次调用需要缓存功能的方法时,Spring会检查指定参数的指定的目标方法是否已经被调用过;如果有就直接从缓存中获取方法调用后的结果,如果没有就调用方法并缓存结果后返回给用户,下次直接从缓存中获取。
二、缓存组件和注解
| 注解 | 说明 |
|---|---|
| Cache | 缓存接口,定义缓存操作。实现有:RedisCache、EhCacheCache、ConcurrentMapCache等。 |
| CacheManager | 缓存管理器,管理各种缓存组件 |
| @Cacheable | 主要针对方法配置,能够根据方法的请求参数对其结果进行缓存 |
| @CacheEvict | 清空缓存 |
| @CachePut | 保证方法被调用的时候讲结果缓存 |
| @EnableCaching | 开启基于注解的缓存 |
| keyGenerator | 缓存数据时key生成策略 |
| Serialize | 缓存数据时value序列化策略 |
三、@Cacheable/@CachePut/@CacheEvict主要参数
| 参数 | 说明 | 例子 |
|---|---|---|
| value | 缓存的名称,在Spring配置文件中定义,必须指定至少一个 | @Cacheable(value="mycache")或者@Cacheable(value={"cache1","cache2"}) |
| key | 缓存的key,可以为空,如果指定要按照SpEL表达式编写,如果不指定,则缺省按照方法的所有参数进行组合 | @Cache(value="testCache",key="#userName") |
| condition | 缓存的条件,可以为空,使用SpEL编写,返回true或者false,只有为true才进行缓存/清除缓存 | @Cacheable(value="testCache",condition="#userName") |
| allEntries(@(CacheEvict)) | 是否清空所有缓存内容,缺省为false,如果指定为true,则方法调用后将立即清空所有缓存 | @CacheEvict(value="testCache",allEntries=true) |
| beforeInvocation(@CacheEvict) | 是否在方法执行前就清空,缺省为false,如果指定为true,则方法在还没有执行的时候就会清空缓存,缺省情况下,如果方法执行抛出异常,则不会清空缓存 | @CacheEvict(value="testCache",beforeInvocation=true) |
四、Spring对消息的支持
- spring-jms提供了对JMS的支持。
- spring-rabbit提供了对AMQP的支持。
- 需要ConnectionFactory的实现来连接消息代理.
- 提供JmsTemplate、RabbitTemplate来发送消息。
- @JmsListener(JMS)、@RabbitListener(AMQP)注解在方法上监听消息代理发布的消息。
- @EnableJms、@EnableRabbit开启支持。
- 使用JmsAutoConfiguration、RabbitAutoConfiguration进行自动配置
五、Spring与检索
SpringBoot通过整合Spring Data ElasticSearch提供了非常便捷的检索功能支持。
- 引入spring-boot-starter-data-elasticsearch依赖。
- 安装对应版本的ElasticSearch。
- 进行配置。
- 使用自动配置的ElasticSearchRepository、Client进行相应的操作。
六、Springboot与任务
1.异步任务
在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的;但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在Spring 3.x之后,就已经内置了@Async来解决这个问题。
@EnableAsync注解开启异步支持。
@Async标识这是一个异步执行的方法。
2. 定时任务
Spring提供了异步任务调度的方式,提供了TaskExecutor、TaskScheduler接口。
@EnableScheduling 启用定时任务支持。
@Schedlued 标识定时任务。
任务的调用时间使用cron表达式进行指定。
Cron表达式说明
| 字段 | 允许值 | 允许的特殊字符 |
|---|---|---|
| 秒 | 0-59 | , - * / |
| 分 | 0-59 | , - * / |
| 小时 | 0-23 | , - * / |
| 日期 | 1-31 | , - * ? / L W C |
| 月份 | 1-12或者JAN-DEC | , - * / |
| 星期 | 1-7或者SUN-SAT | , - * ? / L C # |
| 年(可选) | 空,1970-2099 | , - * / |
特殊字符含义说明
| 特殊字符 | 含义 |
|---|---|
| , | 枚举 |
| - | 区间 |
| * | 任意 |
| / | 步长 |
| ? | 日/星期冲突匹配 |
| L | 最后 |
| W | 工作日 |
| C | 和calender联系后计算过的值 |
| # | 星期,4#2 表示第二个星期三 |
3. 邮件任务
- 邮件发送依赖于spring-boot-starter-mail。
- 使用MailSenderAutoConfiguration进行自动配置。
- 定义MailProperties内容,配置在application.yml中。
- 自动装配JavaMailSender。
七、SpringBoot与安全
1.安全
Spring Security是针对Spring项目的安全框架,也是SpringBoot底层安全模块默认的技术选型。它可以实现强大的web安全控制。对于安全控制,只需要引入spring-boot-starter-security模块,进行少量的配置即可。
@EnableWebSecurity 开启WebSecurity模式
WebSecurityConfigurerAdapter 自定义Security策略。
AuthenticationManagerBuilder 自定义认证策略。
- "认证",是建立一个它声明的主体的过程(一个“主体”,一般是值用户,设备或一些可以在程序中执行动作的其他系统)。
- "授权",指确定一个主体是否允许在应用程序执行一个动作的过程。为了抵达需要授权的点,主体的身份已经有认证过程建立。
2.Web安全
- CSRF(Cross-site request forgery)跨站请求伪造。
- HttpSecurity启用csrf功能。
- 登录/注销
- HttpSecurity配置
- remember me(记住我)
- 表单添加remember-me的checkbox
- 配置启用remember-me功能
- Thymeleaf提供的SpringSecurity标签支持
- 需要引入thymeleaf-extras-springsecurity4
- sec:authentication="name" 获取当前用户的用户名。
- sec:authorize="hasRole('ADMIN')" 当前用户必须拥有ADMIN权限时才会显示标签内容。
八、SpringBoot与监控管理
1. 监控管理
通过引入spring-boot-starter-actuator,可以使用SpringBoot为我们提供的标准生产环境下的应用监控和管理功能,可以通过HTTP、JMX、SSH协议来进行操作,自动得到审计、健康指标信息等。
监控和管理端点
端点名|描述
:-|:-
actuator|所有Endpoint端点,需加入spring HATEOAS支持
autoconfig|所有自动配置的信息
beans|所有Bean的信息
configprops|所有配置属性
dump|线程状态信息
env|当前环境信息
health|应用健康状况
info|当前应用信息
metrics|应用的各项指标
mappings|应用@RequestMapping映射路径
shutdown|关闭当前应用(默认关闭)
trace|追踪信息(最新的http请求)
2. 定制端点信息
- 定制端点一般通过endpoints+端点名+属性名来设置。
- 修改端点id(endpoints.beans.id=mybeans)
- 开启远程应用关闭功能(endpoints.shutdown.enabled = false)
- 关闭端点(endpoints.beans.enabled=false)
- 开启所需端点
- endpoints.enabled=false
- endpoints.beans.enabled=true
- 定制端点访问路径(management.context-path=/manager)
- 关闭http端点(management.port=-1)
SpringBoot与缓存、消息、检索、任务、安全与监控的更多相关文章
- 带着新人学springboot的应用03(springboot+mybatis+缓存 下)
springboot+mybatis+缓存,基本的用法想必是会了,现在说一说内部大概的原理. 稍微提一下mybatis,只要导入了mybatis的依赖,那么有个自动配置类就会生效,你可以去mybati ...
- SpringBoot 与缓存
1. JSR107 Java Caching 定义了5个核心接口: CachingProvider:定义了创建,配置,获取,管理和控制多个CacheManager; CacheManager:定义了创 ...
- SpringBoot 整合缓存Cacheable实战详细使用
前言 我知道在接口api项目中,频繁的调用接口获取数据,查询数据库是非常耗费资源的,于是就有了缓存技术,可以把一些不常更新,或者经常使用的数据,缓存起来,然后下次再请求时候,就直接从缓存中获取,不需要 ...
- SpringBoot第十二集:度量指标监控与异步调用(2020最新最易懂)
SpringBoot第十二集:度量指标监控与异步调用(2020最新最易懂) Spring Boot Actuator是spring boot项目一个监控模块,提供了很多原生的端点,包含了对应用系统的自 ...
- SpringBoot日记——MQ消息队列整合(一)
除了之前讲到的缓存,我们还会用到消息队列来存储一些消息,为了提升系统的异步性能等等: 消息服务有两个概念需要知道:消息代理-message broker,目的地-destination.消息发送由代理 ...
- SpringBoot+Redis 实现消息订阅发布
什么是 Redis Redis 是一个开源的使用 ANSI C语言编写的内存数据库,它以 key-value 键值对的形式存储数据,高性能,读取速度快,也提供了持久化存储机制. Redis 通常在项目 ...
- springboot redis 缓存对象
只要加入spring-boot-starter-data-redis , springboot 会自动识别并使用redis作为缓存容器,使用方式如下 gradle加入依赖 compile(" ...
- springboot~hazelcast缓存中间件
缓存来了 在dotnet平台有自己的缓存框架,在java springboot里当然了集成了很多,而且缓存的中间件也可以进行多种选择,向redis, hazelcast都是分布式的缓存中间件,今天主要 ...
- 带着新人学springboot的应用02(springboot+mybatis+缓存 中)
继续接着上一节,大家应该知道驼峰命名法吧!就是我们javabean中属性一般命名是lastName,userName这种类型的,而数据库中列名一般都是last_name,user_name这种的,要让 ...
随机推荐
- linux安装后需要进行的一些基本设置
修改网络: 在终端中输入:vi /etc/sysconfig/network-scripts/ifcfg-ens33 然后重启网络服务:systemctl restart network.servic ...
- P3015 [USACO11FEB]最好的括号Best Parenthesis
P3015 [USACO11FEB]最好的括号Best Parenthesis 题解 一定要开 long long !!! 通过阅读英文题面我们知道所给出的字符串是已经匹配好的,所以我们只是计算就好了 ...
- C#中正则表达式解析字符串信息
正则表达式提取0~9数字 private static string RegexPickupNumber(string str) { string pattern = @"[^0-9]+&q ...
- SQL-W3School-高级:SQL CREATE INDEX 语句
ylbtech-SQL-W3School-高级:SQL CREATE INDEX 语句 1.返回顶部 1. CREATE INDEX 语句用于在表中创建索引. 在不读取整个表的情况下,索引使数据库应用 ...
- BitmapDrawable
对Bitmap的一种封装,可以设置它包装的bitmap在BitmapDrawable区域中的绘制方式,有: 平铺填充,拉伸填或保持图片原始大小!以<bitmap>为根节点! 可选属性如下: ...
- [Java读书笔记] Effective Java(Third Edition) 第 7 章 Lambda和Stream
在Java 8中,添加了函数式接口(functional interface),Lambda表达式和方法引用(method reference),使得创建函数对象(function object)变得 ...
- Hydra(爆破神器)使用方法
工具介绍 hydra是一个自动化的爆破工具,暴力破解弱密码,是一个支持众多协议的爆破工具,已经集成到KaliLinux中,直接在终端打开即可. hydra支持的服务有: POP3,SMB,RDP,SS ...
- shell 入门学习
目录 shell 入门学习 注释 执行与启动 变量 语法 调试 title: shell 入门学习 date: 2019/7/16 15:47:49 toc: true --- shell 入门学习 ...
- NOIP 2015:信息传递
题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...
- sort(()=>{return Math.random()-0.5)}乱序数组不准确
为什么sort(()=>{return Math.random()-0.5)}乱序数组不准确.(注意结合插入排序原理来理解) @1.chrome浏览器对于数组长度10以内为插入排序.反之则快速排 ...