SpringBoot——日志
SpringBoot——日志1、日志框架 小张;开发一个大型系统;
1、System.out.println("");将关键数据打印在控制台;去掉?写在一个文件?
2、框架来记录系统的一些运行时信息;日志框架 ; zhanglogging.jar;
3、高大上的几个功能?异步模式?自动归档?xxxx? zhanglogging-good.jar?
4、将以前框架卸下来?换上新的框架,重新修改之前相关的API;zhanglogging-prefect.jar;
5、JDBC---数据库驱动;
写了一个统一的接口层;日志门面(日志的一个抽象层);logging-abstract.jar;
给项目中导入具体的日志实现就行了;我们之前的日志框架都是实现的抽象层;
市面上的日志框架;
JUL、JCL、Jboss-logging、logback、log4j、log4j2、slf4j….
日志门面 (日志的抽象层)
日志实现
JCL(Jakarta Commons Loggi ...
SpringBoot--监控
一、监控管理通过引入spring-boot-starter-actuator,可以使用Spring Boot为我们提供的准生产环境下的应用监控和管理功能。我们可以通过HTTP,JMX,SSH协议来进行操作,自动得到审计、健康及指标信息等
步骤:
–引入spring-boot-starter-actuator
–通过http方式访问监控端点
–可进行shutdown(POST 提交,此端点默认关闭)
监控和管理端点
二、定制端点信息– 定制端点一般通过endpoints+端点名+属性名来设置。
– 修改端点id(endpoints.beans.id=mybeans)
– 开启远程应用关闭功能(endpoints.shutdown.enabled=true)
– 关闭端点(endpoints.beans.enabled=false)
– 开启所需端点
•endpoints.enabled=false
•endpoints.beans.enabled=true
– 定制端点访问根路径
•management.context-pat ...
Spring Boot--安全
一、安全Spring Security是针对Spring项目的安全框架,也是Spring Boot底层安全模块默认的技术选型。他可以实现强大的web安全控制。对于安全控制,我们仅需引入spring-boot-starter-security模块,进行少量的配置,即可实现强大的安全管理。
几个类:
WebSecurityConfigurerAdapter:自定义Security策略
AuthenticationManagerBuilder:自定义认证策略
@EnableWebSecurity:开启WebSecurity模式
应用程序的两个主要区域是“认证”和“授权”(或者访问控制)。这两个主要区域是Spring Security 的两个目标。
•“认证”(Authentication),是建立一个他声明的主体的过程(一个“主体”一般是指用户,设备或一些可以在你的应用程序中执行动作的其他系统)。
•“授权”(Authorization)指确定一个主体是否允许在你的应用程序执行一个动作的过程。为了抵达需要授权的店,主体的身份已经有认证过程建立。
这个概念是通用的而不只在Spring S ...
Spring Boot--任务
一、异步任务在Java应用中,绝大多数情况下都是通过同步的方式来实现交互处理的;但是在处理与第三方系统交互的时候,容易造成响应迟缓的情况,之前大部分都是使用多线程来完成此类任务,其实,在Spring 3.x之后,就已经内置了**@Async**来完美解决这个问题。
两个注解:
@EnableAysnc、**@Aysnc**
1234567891011121314@Servicepublic class AsyncService { //告诉Spring这是一个异步方法 @Async public void hello(){ try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("处理数据中..."); }}
二 ...
Spring Boot--检索
12345678910111213141516/** * SpringBoot默认支持两种技术来和ES交互; * 1、Jest(默认不生效) * 需要导入jest的工具包(io.searchbox.client.JestClient) * 2、SpringData ElasticSearch【ES版本有可能不合适】 * 版本适配说明:https://github.com/spring-projects/spring-data-elasticsearch * 如果版本不适配:2.4.6 * 1)、升级SpringBoot版本 * 2)、安装对应版本的ES * * 1)、Client 节点信息clusterNodes;clusterName * 2)、ElasticsearchTemplate 操作es * 3)、编写一个 ElasticsearchRepository 的子接口来操作ES; * 两种用法:https://github.com/spring-projects/spring-data-ela ...
Spring Boot--消息
1234567891011/** * 自动配置 * 1、RabbitAutoConfiguration * 2、有自动配置了连接工厂ConnectionFactory; * 3、RabbitProperties 封装了 RabbitMQ的配置 * 4、 RabbitTemplate :给RabbitMQ发送和接受消息; * 5、 AmqpAdmin : RabbitMQ系统管理功能组件; * AmqpAdmin:创建和删除 Queue,Exchange,Binding * 6、@EnableRabbit + @RabbitListener 监听消息队列的内容 * */
1234spring.rabbitmq.host=118.24.44.169spring.rabbitmq.username=guestspring.rabbitmq.password=guest#spring.rabbitmq.virtual-host=
一、概述
大多应用中,可通过消息服务中间件来提升系统异步通信、扩展解耦能力
消息服务中两个重要概念:
消息代理(me ...
Spring Boot--缓存
123456789101112131415161718192021222324252627282930313233/** * 一、搭建基本环境 * 1、导入数据库文件 创建出department和employee表 * 2、创建javaBean封装数据 * 3、整合MyBatis操作数据库 * 1.配置数据源信息 * 2.使用注解版的MyBatis; * 1)、@MapperScan指定需要扫描的mapper接口所在的包 * 二、快速体验缓存 * 步骤: * 1、开启基于注解的缓存 @EnableCaching * 2、标注缓存注解即可 * @Cacheable * @CacheEvict * @CachePut * 默认使用的是ConcurrentMapCacheManager==ConcurrentMapCache;将数据保存在 ConcurrentMap<Object, Object>中 ...
Redis中的跳跃表
Redis中的跳跃表前言跳跃表是一种有序的数据结构,它通过在每个节点维持多个指向其他节点的指针,从而达到快速访问节点的目的。
什么是跳跃表对于单个链表来讲,即便链表中存储的数据是有序的,如果我们要向在其中查找某个数据,它只能从头到尾遍历链表。这样查找效率就会很低,时间复杂度会很高,达到了O(n)。
如果我们想要提高其查询效率,可以考虑在链表上构建索引的 方式,每两个节点提取一个节点到上级,我们把抽出来的那一级就叫做索引。
这个时候,我们假设要查找节点8,我们可以心在索引层遍历,当遍历到索引层中值为7的节点时,发现下一个节点是9,那么要查找的节点肯定在这两个节点之间,我们下降到链表层继续遍历就找到了8这个节点。。原来我们在单链表中找到8这个节点要遍历8个节点,而现在有了一级索引后,只需要遍历5个节点。
从上个例子中,我们可以看出,加来一层索引后,查找一个节点需要遍历的节点个数减少了,也就是说查询效率得到了提升,同理我们在一级索引的基础上,在加二级索引。
从图中我们可以看出,查找效率又有了提升,因为在这里例子中我们的数据量很少,当有大量的数据时,我们可以增加多级索引,在查询时,效率可 ...
Redis中的数据结构
Redis中的数据结构前言Redis是一个高性能的分布式内存数据库,在国内外个大互联网公司中都有着广泛的使用,即使是一些非互联网公司也有着非常重要的使用场景。
Redis提供了五种主要的数据类型,它提供了强大且实用的功能,然而实际开发中,有大多数的开发者仅仅只会使用简单的 Redis String的 Get和Set,下面将回顾Redis五大对象,以便能够在实战中游刃有余。
String(终究是我扛下来所有)
Hash(存储对象我也行)
List(栈和队列我都行)
Set(标签系统我在行)
Sort Set(排起名来我最棒)
字符串字符串类型是Redis最基础的数据结构,其他几种数据结构都是在字符串类型基础上构建的。字符串类型的值是字符串(简单的字符串、复杂的字符串(例如JSON、XML))、数字(整数、浮点数),甚至是二进制(图片、音频、视频)等。
字符串对象的内部编码有3种 :int、raw 和 embstr,Redis会根据当前值的类型和长度来决定使用哪种编码来实现
int:如果一个字符串对象保存的是整数值,并且这个整数值可以用long类型来表示
raw:如果字符串对象保存 ...
Redis实现分布式锁
Redis实现分布式锁前言分布式锁的实现有三种方式
数据库乐观锁
基于Redis的分布式锁
基于Zookeeper的分布式锁
分布式锁满足的条件为了确保分布式锁可用,我们至少要保证锁的实现同时满足以下几个条件
互斥性:在任意时刻只有一个客户端能持有锁
不会死锁:即使有一个客户端在持有锁的期间发生崩溃而没有主动解锁,也能保证后续其它客户端能加锁
容错性:只要大部分的Redis节点正常运行,客户端就可以加锁和解锁
解铃还须系铃人:加锁和解锁必须是同一个客户端,客户端自己不能把别人加的锁给解除
加锁代码正确示例Talk is cheap, show me the code。先展示代码,再带大家慢慢解释为什么这样实现:
123456789101112131415161718192021222324public class RedisTool { private static final String LOCK_SUCCESS = "OK"; private static final String SET_IF_NOT_EXIST = " ...