00:00
好,前面呢,我们分析了一下spring boot底层数据源的自动配置原理,我们发现呢,只要我们导入数据库开发的JDBC场景,Spring boot呢,会给我们容器中放一个黑carry的数据源,那以后呢,就是从这个数据源里边获取连接来对数据库进行增删改查操作,而这个数据源呢,最大优点就是他目前是市面上我们这个性能最好的一个数据源产品,但实际在开发的过程中,我们企业呢,也比较喜欢使用阿里的dre数据源,因为呢它具有对我们整个数据源的整套解决方案,我们数据源的全方位监控,比如我们防止S口的注入攻击等等等等功能,它这一块呢都会具有,所以我们现在呢,就来整合一下我们这个direct作为我们的底层数据源,看看怎么使用,那direct的这个官方的get,他have地址老师呢也放在这,所有的这个它的详细使用完全可以参照官方文档,这还有中文文档,我们就照着来做就行了,那我们想要使用这个direct数据源,其实这就牵扯到我们。
01:00
现在想要整合第三方的一个技术来进入我们的spring boot里边,那想要整合第三方的技术呢,我们目前有两种方式,第一种方式我们纯手工手动的把好多的东西我们全部写在里边,第二种是找有没有官方的这些starter,比如我们这个direct,我们想要整合它,我们看有没有这个什么什么start,我们就希望通过假设有一个direct的这个start,也就是说我们开发direct场景,我们只要把这个start场景启动器导入过来,这start里边呢,肯定按照模式就会有叉叉叉auto和有很多的自动配置类,这自动配置类呢,就会把我们这个场景下要用的相关组件,比数据源等等一大堆给我们导入到容器中,而这些相关的组件的核心配置下,又是跟我们的配置文件绑定的,所以啊,对于我们来说最快的方式肯定是找start,然后呢改配置文件,我们整个场景呢就能用了,当然了,我们现在先来说第一种方式我们如何自定义使用,那我们现在自定义使用。
02:00
第一种方式呢,我们先来想要使用direct数据源,我就先引入它的依赖,我们把这一块呢,来到官方这一块,我们看到它依赖,看阿里巴巴re,那先给系统里面引入数据源再说来再来看怎么做,那数据源的引入呢,你在这来写一下,我之前引入过,我直接写一个direct,那我就引入我们的这个1.17这个版本,把这个呢复制过来,那我们现在呢,想要使用direct数据源,那我们的做法就是首先我们引入我们的这个数据源,其次呢,就是我们如果以前用spring的原生办法,那就是我们可以给容器中放一个我们这个组件叫direct data source,比如我们这个数据源,把这个数据源的所有信息呢,在这可以配好,但是呢,我们现在用了spring boot,那怎么办呢?那我们就可以这么来做,我们写一个自己的配置类走,比如呢,我们就叫my date。
03:00
Post,呃,Config r conig,我们数据源的这个配置,然后呢,首先标注它是一个配置类,其次呢,我们接下来我们也给容器中放一个数据源,我们就叫data source,数据源的统一接口呢,就叫data source,我们给容器中放一个它,然后呢,我们来标注at并注解,我们把这个注解标注上,然后我们给容器中的数据源,我们自己new一个direct的data source,我们自己创建一个这样的数据源,那这句话呢,其实就是相当于我给容器中也放了一个数据源,只不过这个数据源呢,是我们自己创建的direct这个数据源,而且呢,它也会生效,为什么呢?我们可以来参照以前数据源的自动配置里边,数据源的自动配置里边,我们这数据源的自动配置里边呢,它导了,比如导了我们这个黑克瑞的配置,黑克瑞配置里边呢,有一个关键核心点就是呢,它在这按特B给。
04:00
我们容器中放一个黑carry的数据源,但是呢,它在前面呢,有一个条件判断叫conditional Miss,然后呢,当容器中没有这个东西的时候,我们才会导入黑客瑞数据源,所以呢,我们一定要注意人家的默认配置,那默认的自动配置是是自动配置是判断容器中没有才会配咱们这个黑carry瑞的这个数据源,而我们现在呢。只要我们写了at b,相当于呢,我们黑开瑞的这一块配置就不会生效了,因为我们现在容器中现在有一个自己的数据源了,那好,但接下来最重要的呢,就是我们的这个数据源,大家来看我们的这个数据源里边呢,你真想要返回给我们这个容器里边,那数据源里边呢,一些核心的项的设置我们都在这得设置好,比如我们这个数据源点set,我们想要连接上哪个地址set URL对吧?包括呢,我们数据源的set,我们数据库的username password我们都得设置,所以我们会发现呢,每一个数据源里边都会有非常多的属性我们要设置,而我们在代码里边的写子也不合适,所以我们一般呢,都抽取在配置文件里边,而正好大家看我们的这个配置文件里边呢,我们以前配的spring data source下边有这些属性,User nameme password以及URL,这几个属性呢,跟我们direct data source这个属性名是一模一样的,咱去掉set后边的第一个首字母小写的。
05:32
那我们属性名是一模一样的,所以相当于我们即使是direct这个数据源,我们所有的属性也可以直接从配置文件中获取,那怎么获取呢?我就直接写上这么一个注解,叫configuration properties,你们在底层呢,会大剂量见到这个注解,这个注解呢,就是把我们这个组件它里边的属性跟配置文件里边的东西来进行绑定,跟配置文件的什么绑定呢?就跟spring data source下边的这些属性绑定,下边有username password等等一大堆,那么就在这我来写一个它spring下边的data source,那这样一做以后呢,我们direct这个数据源里边的所有核心属性默认呢,就会跟我们spring data source下边的东西呢,给我们一一绑定,那我们可以来测试一下,我们这么一写以后,我们容器中的这个数据源是不是就换成我们自己的direct的数据源了,怎么测试呢?来到我们的这个测试类里边,来到我们的这个测试类里边,我们来测试方法里边。既然容器中有。
06:32
有数据源就来写一个data source,我们把这个数据源呢,就直接自动注入过来,把这个数据源我们自动注入进来以后呢,我们就来看一下它的类型是什么,所以我不妨在这儿落个点一个info来打印一下数据源类型,数据源类型它类型是什么呢?我们来打印一下它是data source.get class就行了,好,我们来确认一下,我直接启动起来们看我一下我们这个测试类,它现在给我们打印容器中的数据源是什么类型啊。
07:18
好,我们看到呢,他现在打印的这个数据源类型,诶就变成我们自定义的数据源类型了,那好,那相当于呢,我们现在我们底层呢,就相当于操作我们自定义的数据源,而且我们这个测试类呢,顺便在前边还有我们的这个查询,像我们这次查询呢,就是从我们的direct数据源里边获取了连接查的数据,那没问题,但我们接下来呢,还要把我们这个数据源,Direct数据源里边的其他功能我们都打开,比如我们其他功能我想查看整个direct的监控页,这个监控页怎么办?来人家这一块呢,都有官方文档地址,我们来把它打开来看下监控页怎么办?如果我们想要做对数据源整个来做监控功能,在以前我们用direct,我们需要在web插里边配一个so,这个so拦截的路径呢,叫direct下边的所有请求,然后呢,我们访问当前项目,Direct下边的这个请求就会来到监控页,哎,监控页呢有账号密码,所以如果我们想要去监控页,我们还得有这么一个so select,那这个so呢,它就叫。
08:18
阿里巴巴direct support http,这个其实对于我们来说给容器中放一个也简单,而以前我们需要做哪些步骤,我们现在呢,使用自定义的方式都得做,以前想要给容器中得配一个数据源,我们配了,然后呢现在还得放一个so,我们也得放,那我们public,我们想要放so呢,们现在的方式可以是这个叫soate registry b,好,我们呢给容器中放一个soate的这个组件,而这个so名字叫什么呢?我们可以把这个so的名字我们给它拿过来,我们通过方法名就明显的区分啊,我们当前是哪个so at,一个B,然后呢,我们接下来return,我们就来返回我们的这个S,我们只要有了这个S,我们这是相当于配置direct的监控页功能,监控页功能好,那我们现在呢,就来new一个so registergistry b regry b来拗一个,它在它里边的这个。
09:18
呢是state view我们的这个,然后呢,我们这个里边呢,接下来我们的这个构造器里边,我们就要传一个,并且呢,传这个so映射哪个路径,那么就把这个so准备一下,你有一个state view so,我们把这个so直接拿过来,好,我们把这个呢,然后放到这个so regist being里边,而它拦截的路径呢,就是杠right下边的这个芯,也就说我们以前在web插里边配置的所有东西呢,在这一块还是一样来配置,然后呢,我们把这个solid re being来给容器中一返回,这样我们容器中就会有direct的这个监控页了,不妨可以来测试一下,看一下我们能不能使用我们这个direct的这个监控页。
10:09
来启动一下。好,现在呢,项目启动起来,我们来访问local cost 8080,好,这是我们这个项目,诶我们发现呢,我们这个项目的这些静态资源已经啊有不好用了,这是因为我们之前在这呢,在配置的时候,我们对项目做了一个配置啊,我们enable了我们的web mvc,我们开启了整个死光MVC的全面接管功能,然后呢,所有的静态资源都以AA开始,而我们这些页面呢,影的静态资源,它的这个请求路径呢,不是以A开始的,所以这些资源呢,都成了404,那那为了方便期间我把这个ae web m VC去掉,然后呢,大家有知道我们这个操作全面监管spring m VC就行,好,我们把这个放在这儿,然后呢,我们来重新来启动一下。
11:11
好,我们来访问direct,那当前项目,那当前项目呢,访问没没问题,然后呢,我们想要看监控页,那就是我们来访问这个direct,来我们看到呢,这确实来到了它的这个监控页,我们数据源的这个信息在这呢都有打印,每一个参数,它的值当前是什么,内容这一块呢都有提示,包括我们的SQL监控,只要我们查了数据库,那这一块的SQL监控就会有内容,那么可以来看一下,那我想要让他查数据库呢,我们就把我们的这个方法,那简单的就直接拿来。我们随便写上一个请求来测试一下,来到某一个controller里边,好,我们就来随便来写一个请求,Public string,然后呢,我们就叫query,我们来查询query from DB,我们就来查询数据库的查询数据库呢,它就是来调这个方法,然后呢,最终查的这个东西呢,我们给他一返回,点一个图string,而且呢还可以来get monkey来让他处理一个请求,就是circle这个请求,然后呢,我们把这个数据让它响应出去,Response body就不跳转页面了,我需要一个j d bc time,因为容器中呢,什么东西都自动配好了,我就直接把它自动输入at一个autowa,好,那这个自动注入一好以后呢,我们在这就准备了一个请求,我来重新启动,我来只要访问这个请求,那么就能看到我们的整个监监控数据。
12:41
好,来,稍等一下。我先来刷新啊,监控页呢,这有,我们接下来发一些请求来测试一下logo host,那我们来发circle请求,当然我们先得登录,我们有这个拦截器。好,然后呢,我们来发circle走,来多发上几遍,123,我们来多发几遍,然后我们来我们看监控页刷新,诶这一块呢,我们会发现所有的这个东西呢,它没监控上,为什么呢?就说我们现在呢,相当于只给我们容器中放了一个,只开启了监控页功能,而按照我们这个de direct官方文档,我们所有的监控功能要开启,我们得在这打开它的监控统计功能,要用这个它的这个组件叫state filter来点进来,所以我们来看啊,它这个怎么配它这个呢?其实它的这个配置方法,我们如果是以前我们是给direct这个数据源的,Filters这个属性里边要写一个value y6值呢叫state s sta,这s sta呢,相当于就开启了direct里边的这个状态监控功能,所以呢,人家看看人家的配置,以前是给这个数据源里边的filter属性里边写的,所以我们现在想要开启它的监控功能,其实也一样给这个数据源啊,数据源在这儿,它的filter。
13:57
S属性里边,那我们就来看有没有set filters,有属性里边呢,它写sta,我们也写,我们把这个呢一写,然后呢,这个set filters里边,因为它这个东西呢,会有异常,那就把这个异常该泡泡,然后呢来重新启动。
14:15
这块呢,相当于加入监控功能,加入监控功能才可以。来重新测试一下,还是来到我们的这个监控页,好准备好这个监控页,我们现在一访问呢,直接就进来了,然后呢,我们接下来在这我来访问circleq,我们先要登录。来访问circle狗,来多刷新几遍,好,我们一刷新以后呢,我们来看监控页,我们对circleq监控,诶我们发现它在这呢就统计出来了,那么这个SQ的这个执行的呢,八次执行的数量是八次执行时间呢是27毫秒,最慢呢是20,然后呢,整个读取的这个行数,我们读了八行啊主相当于读了八次,那就八条记录,然后呢,接下来包括它的时间分布,这是时间分布又是什么意思啊,都可以来参照官方文档,官方文档呢,在这应该说的非常清楚,我记得官方文档呢有一个啊direct连接池的这个介绍,在这个介绍里边呢,它里边就有一些,诶它的这个区间分布,时间分布呢,大家会看到在我们的这个监控页里边呢,它是一个,呃,是一个中括号里边有八位数,而这八位数的意思是什么,它我们参照这八位数的意思呢,它其实是说,诶我们看啊,这有八位数,要说第一位呢,表示如果我们当前的这个查询是零到一毫秒以内。
15:42
倍的次数,第二位呢是一到十毫秒以内的次数,所以呢,我们现在对照这个页面就应该是零到一毫秒以内,我们现在呢,相当八次请求,零到一毫秒以内是四次,一到十毫秒以内呢是三次,接下来的第三位数代表的是十,十到100毫秒以内的是一次,所以它在这呢有一个统计的我们直方分布图,那我们现在呢,这一块我们监控就OK了,我们还想要开启其他功能,比如我们的这个防火墙外B应用的监控,我们现在就来做其他的功能就行了,我们参照direct官方文档来看其他的功能我该怎么开启,来退出来,来到中文文档,我想开启防火墙来看一下啊,我们现在的这个内置监控页有了,哎,我们怎么配防火墙是用这个叫监,我们怎么监控web,要用这个web state filter,我们来把它打开,来看它是怎么配的,它呢也是一样,在我们这个它会给容器中放一个叫direct web filter,这个filter。所以呢,相当于我们。
16:42
要要使用它来采集web j BBC相关的数据,也就是说这一块的数据,我们在web应用里边呢,会监控相关的这个东西,我们要采集这一块的数据,哪一个web请求,呃,执行了什么样的东西,那么就需要开启web的这个监控,这个web监控呢,是给里边放一个filter,所以呢,我们filter其实也放过,那这个so监控页我们放了,接下来我们放一个filter,我用这个filter public,那filter呢,人家是叫filter registergry b,好,我们把这个弄过来,然后呢,我们相当于给容器中我们要放一个这个filter,就能监控外边应用了,那么这个filter呢,At being来放到容器中,然后再来接下来return,我们先来return now,我们就来写一个filter registergistry b new,一个我们的filter registry b,我们把这个拿来,然后呢,我们的类型叫web state这个filter这。
17:42
里边的,然后呢,我们把这个filter创建出来,有一个web state filter把这个呢传进去,然后呢,这个filter拦截的路径是什么?那每一个filter呢都有拦截的路径,我们可以来看一下啊,这个filter里边呢,会给我们来传啊,我们这个菲呢,拦截哪些select的路径,然后呢,我们来看一下,我们来看一下在这一块的配置,那菲拦截的路径呢是杠芯,所以呢,那们接下来就在这儿呢,得配一个那们当前菲特拦截的路径是杠芯。
18:21
来我们这一块呢,如果写不上了,那我们就使用我们的这种办法来先传一个filter,然后呢,我们给这个filter的reg being里边来设置它的路径,点一个set URL pattern,也就是说我们设置它拦截的路径,而它拦截的路径呢,就叫来给一个集合吧,A and list,那第一个呢,就是杠星,它拦截所有路径,另外我们菲的统计它呢,相当于统计每一个请求,查了数据库的这些信息,但是呢,这些要排除在外,大家看啊,哪些排除在外呢?像我们这些静态资源的使用,Direct下边的所有请求,这是我们监控页的,监控页的我们不用拦截,剩下的呢,我们都要拦截,所以我们相当于还要排除一些啊,人家官方呢都给我们指示了,所以我们想要排除哪些呢?那我们就不妨在这一块filter registerg in里边set xlo来看啊,哪些要排除X cloudde呢?
19:21
是我们filter里边的这个属性来确认一下xlo,这个是filter里边的初始化属性,所以呢,我们在这个filter对象里边点,我们看一下有没有set exclude exclusion。那这一块呢,我们看到好像没有,我们来确认一下啊,我们这个filter它的这个属性是哪的好,它叫引P,叫初始化参数,那就是filter的初始化参数,Filter的初始化参数呢,是在filter这个be里边应该有一个叫添加初始化参数and init parameter这个初始化参数呢,其中就有一个叫exclclusion,我要排除哪些请求。
20:06
在这,然后呢,还有我们在这儿要这个请求的内容是什么,把这一块它的值,它的值呢给这一装好,所以呢,这样我们就相当于又配了这个filter,那现在呢,我们就能监控外边应用了,来测试一下啊,把这个filter一定放在容器中。哎,我们是放filter in,别放错了,来重新启动。那为了这个测试方面,因为我们经常要访问这个SQ,还要登录,太麻烦了,我们来到我们的web配置里边,我就让他把这个SQ请求呢放行一下。来重新测试。啊,来到这儿呢,我们来看一下,现在还是来到我们的这个监控页,数据源呢在这都有,然后呢,接下来我们来刷新搜狗,多刷几遍,然后呢,来到我们的这个监控页里边看效果,Circleq监控啊,它测试刷了这么多遍,防火墙呢,我们现在没开,但是web应用的监控,哎,我们这个web应用里边的东西,它现在已经出来了,Uri监控我们看到就是这个circle发的这个请求,然后呢,九次请求的时间,总共呢,请求这么多,请求最慢,单次最慢是67毫秒,JDBC呢,执行了九次JDBC的时间是20毫秒等等等,所以呢,这一块呢,整个信息就有了,包括呢,我们想要把其他的这个监控都调出来,怎么办?这外网应用呢,有了uri监控了,有了S狗防火墙没有,那我们就来参照官方文档,我们怎么来开启防火墙的配置,来看一下,哎,怎么防御我们防火墙,我们把这个防火墙打开,防火墙打开呢,我们会发现其实呢,就是给RI这个数据源里边。
21:55
相当filters里边再添一个值叫防火墙,而且呢,我们可以有多个值,我们之前添了一个监控,再来添一个防火墙,所以呢,我们相当于filters里边写两个值就行了,那就来到这一块的配置,在它的这个filter里边写两个值,一个是监控,一个是防火墙,来我们这个filters里边呢,我们来看一下啊filters啊,它我们是用逗号分割就行了,多个只用逗号分割走来,直接启动起来,因为它只能传一个参数,我们也看到呢,它这个写的这个值直接逗号一分割就行了,我们把防火墙的功能呢又打开。
22:37
那再来测试一下,我来FF5刷新来到我们的这个页面,然后呢,接下来我们来不断的刷新circle口,好让我们F5刷新看一下我们防火墙,它在这表统计所有的东西就来了,白名单这个相当于就是放行的,我们可以加黑名单,这些怎么加我们都可以参照配置就行了,那防火墙功能也开了,搜狗监控也开了,防火墙功能也开了,数据源的信息也有了,我们web应用的监控也有了,然后呢,还有UI的监控也有了,那我们接接下来可以有session的监控和的监控,Spring的监控呢,可以来监控我们这个spring啊,里边到底有多少的这个组件,我们可以来看一下啊,它这有关联的监控,可以把这个打开。
23:18
点进来。好,我们来看一下spring关联的这个监控,Spring关联的这个监控里边呢,它是给我们这里边放一个这个intercept,相当于他自己写的,而我们只要看到官方文档里边并用标签,我们就可以给容器中放一个这样的组件,然后呢,还有一个这样的组件,这个组件里边呢,要用到我们上面的这个组件,因为它的这个intercept names是它,然后呢,包括我们要监控拦截哪些类我们在这,但是呢,我们常用的呢,就是我们直接监控哪个包下边的这些东西,然后呢,这还有up的功能,我们想开呢,都可以来参照这一块的配置,我们来看一下。也就是我们说的那一句话,只要我们知道以前怎么用,那现在呢,相当于把以前的这一段我们翻译成我们的这一块的配置就行了,你看到鼻in标签就按照B给容器中放组件就行,但是呢,现在我们来把整个这个功能呢,稍微再完善一下,能看到呢,现在是我们的这个监控页直接访问就就能访问到了,但然我们实际上呢,可能需要登录,那这个登录怎么做呢?还是来参照这一块,比如我们监控sol的这个配置,在这个sol里边呢,我们可以配置监控页的账号密码,这个账号密码呢,就是一些初始化参数,Solid的初始化参数,所以呢,包括我们可以配置它的这个黑白名单,只有哪些地址呢,能登录进来,哪些地址不能登录,所以我们可以就在这既然是solid的初始化参数,那就在solid的register being里边,我们添加一个初始化参数,有没有and in p,好,那添加初始化参数,初化参数呢?它的名字我们现在第一个叫you Logan user the name。
24:56
刚才我们要登录的用户名,要登录到这个监控页的用户名,比如这个用户名呢,我们就叫admin,然后呢,密码我们也可以再来填一个初始化参数,这就相当于替代了我们这段的web配置,密码呢就叫login password 123456,好,我把这一块呢填上来,启动起来。
25:27
这是我们第第一处优化的地方,我来填上他的这个账号密码。填上账号密码,那现在再来刷新,我来F5,哎,我们发现呢,现在就要账号密码了,我的命123456,然后呢,我们可以来访问circle,它呢也会有统计记录F5包括呢,我们可以登录进来,123456。登录进来再访问circleq,因为我们这次的SQ的访问呢,相当于就有登录的信息了,它会给我们发那个解session ID的cookie,所以我们在这来看一下统计搜Q监控我们登录呢,哎,我们这个SQ呢,发了这么多次,包括防火墙里边的web应用uri监控,哎,我们都发了哪些请求,诶们发现这一块块所有的请求我们都监控到了,然后呢,再来我们的这个session监控,我们当前登录的session信息,在这一块呢,其实也有,所以这一块呢,整个详细的信息我们就进入到这个监控件,而且呢是一定要登录进来的,那至此呢,我们对direct数据源的基本配置就结束了,但是我们发现其实如果是我们从头到尾自定义的话,比如说我们把这些东西全部翻译过来,要写也挺麻烦的,哎,这一块呢,也有几个优化的写法,比如给大家看一下,我们在这呢,会发现我们要给direct这个数据源里边设置很多的属性,其中就有filters,甚至我们要设置它的这些属性叫set,比如它的这个最大。
26:54
呃,最大最大的这个活跃的线程数,我们给一个十等等,那这些属性呢,只要大家在delete的数据源里边能调用set方法设置的属性,同样的你在这个配置文件里边,你直接写就行了,因为我们direct数据源是绑定了spring data source下边的,所以呢,它有一个属性,我就来写一个filters filters,好filters filters呢我们来加一个它,然后呢,它的值就是我们以前写的这两个,这个呢也是一模一样的效果,我们写的这两个监控和这个。
27:30
然后呢,包括我们有没有max active,诶我们这儿提示确实有了最大的活跃数,比如我们来给一个12,那这一块呢,就都我们来启动起来,肯定呢跟之前一样的效果,如果你把这个filters注掉,那就有问题来就说我们在这一块属性写的什么,它自动的呢,就能给我们绑定到这,只要你是set方法调用,因为属性呢,本来就是get set方法,来再来确认一下它的监控功能还在就行,F5登录进来得叫A的命,123456,然后呢,我们来访问一下circleq,多访问几遍,来看一下它的监控功能还在不在SQ监控啊,没问题啊,来我们这一块的配置我们就结束了,那下一节课看一下我们如何导入这这个start的方式来把我们的这个整合进来。
我来说两句