00:00
好,接下来我们来说第九章BOO的原理解析,那首先在这个章节我们会给大家补充一些我们前面没讲到的,包括我们后边还有经常使用的springt一些高级特性,那这些高级特性呢,大家也可以来参照springt官方文档,有一个叫spring boot features点进来里边这些特性有很多,那包括整合第三方的一些技术,这里边的都有,包括我们消息组件的缓存的,那我们来挑我们最核心的,我们常用的。那首先我们来说第一个特性叫profile功能,Profile功能是干什么的?它呢是我们spring boot为了方便我们多环境适配来给我们简化的一个profile功能,来想象这么一个场景,我在这呢开发了一个微服务,它的这个配置文件里边呢,配了一堆的信息,可能有联想数据库的,包括呢,联想red,包括我们还有一些杂七杂八的配置,但这些配置呢,是在我开发环境下,哎,我们当前在idea里边进行开发,我可能呢,连的是我本机的这些测试之类的数据库。
01:00
那一旦呢,我们这个服务要迁移到我们这个生产环境,那可能这一堆的配置我们都得变得连上我们生产环境线上的这些数据库,那咋办?如果我们每次来切换环境,都需要手动的把这些配置全部修改掉,再打包部署,这样太麻烦,所以呢,STEM boot我们简化了一个功能叫profile fair,我们可以直接使用profile fair们快速的进行环境切换,它这个切换呢是这样子的,我们可以首先用第一种场景,我们在这个微服务里边呢,多创建几个配置文件,告诉boot,这个呢是生产环境的配置文件,这个呢是测试环境的配置文件,将来你的这个应用只要一上线,你让spring boot切换到生产环境即可,将来spring boot自动就会应用生产环境的配置文件,那其他测试环境的配置文件我就可以忽略了,然后我们整个线上的应用就是用的生产配置,所以呢,我们只需要一键就能切换过来,那么来体验一下这个功能,Prop功能呢,那是参照。
02:00
好,我们第三章节就行了,我们提前呢在这创建好了一个项目,那这个项目里边呢,我们看引入了非常简单的一个web开发场景啊,我们在这为了测试我们这个效果明显期间在这专门编写一个controller,这个controller呢,比如我们就叫hello controller,这个hello controller它是一个rest controller,我们返回JA算数据,好,然后呢,接下来我们来准备上一个请求,我们比如就叫hello请求,当你给我发送我们这个请求的时候,按一个get map,我们就让它来映射杠这个请求,然后我们直接来return,我们来返回一个打招呼的信息,那hello hello呢,我希望在这能加一个人名,但是这个名字呢,生产环境,测试环境,开发环境它是不一样的,所以呢,我在这准备一个名字,Private string name,而这个名字呢,我就可以配置在配置文件中。比如。
03:00
Properties,我配这么一个东西,要person给name,等于张三好,我想要获取这个名字,大家可以用我们以前的方式绑定配置文件,我先用一个最快的方式叫at value,那这样呢,我们可以使用Dollar大括号,那这就是获取我们这个动态配置文件里边的值,那在这呢配了一个叫person.name CTRLC,好,那这呢就能拿到配置文件的值,而且如果我们还可以有这种语法,我写一个冒号,冒号的意思就是如果前边你这个配置文件的这个值你拿不到,那你就给我给一个默认值,默认值比如我们来写一个李四啊,那默认值即使你不配,那就是李四。好,我们就可以现在不配,那这样呢,我们就准备好了一个配置文件,当然呢,这这是我们开发环境下的,那如果是生产环境呢,我们可以可能需要变配置,那怎么办?我们只需要准备一个配置文件,但这个配置文件呢,可以是yama properties都行,这个配置文件呢,我可以准备上一些,比如我生产环境这个人的名字,他呢教我们这个生产环境张三啊,我们随便写一个,然后呢,可能还有测试环境,但是呢,我们现在这个配置文件怎么告诉spring boot,这是生产环境的配置文件,我们只需要给它加一个标识,这个标识的语法呢,就是杠,接下来加上环境标识,我们环境标识呢随便写,我们叫prod,这是我们公司规定的生产环境呢,就叫prod,好。
04:27
我们来给它创建出来,如果我们还有一个测试环境的配置文件,我们可以用同样的方式,Application,我们加一个环境标识,比如叫test,点一个牙面,可能大家公司的这个环境标识呢,不叫product,叫u at test等等一大堆,好我们按照这么个来用,那接下来我们生产环境配置的这个名字呢,是张三,那测试环境呢,我也可以来启动。测试环境的这个名字呢,我们就叫test张三,好,这样呢,我们现在来启动应用,我们来看一下,我们现在呢,启动应用,大家说我们这个值获取到的是哪个值,是生产环境的prod张三,而是测试环境的张三,还是我们默认什么都没配,默认没配的话呢,还有一个默认值叫李四,到底是哪个,我们可以来测试一下,首先我们这个当前项目呢,是8080端口启动来8080回车,哎,发现呢,它打印的是李四,说明呢,它是使用了默认配置文件,所以呢,我们现在首先来说,我们这是一个在我默认启动的情况下,我们是加载默认配置文件,如果我们想要切换环境怎么办?我只需要呢,在默认配置文件里边告诉spring boot我现在当前是啥环境,那么spring我们使用这个叫点一个pro active相当于我要激活哪个环境,那这块写什么呢?我们这有prod环境有。
05:52
环境,你想激活什么环境?在这写一个test,我再来启动,来看一下效果。
06:04
好,然后呢,我们现在8080端口启动,我来刷新M,发现呢它变成test张三,那同样的如果我来写prod,那就是激活prod环境,那就给我们展示的就是prod张三,所以呢,我们可以通过我们这个环境切换,能快速的我们改变配置文件加载的这个值,那另外的一个就是如果我们这个环境里边出现了同名配置,比如我们在我们的这个默认配置文件里边,我写了一个server port是8080,然后呢,我在我的现在是激活的是生产环境,我在我生产环境呢,又配了一个端口号叫server,我们叫8000,还有我们的测试环境,我也把这个端口号额外再配一下,比如呢,我们叫7000,请问我们现在呢,激活了生产环境以后,那我们的端口是默认的8080还是我们配置的8000来测试一下。
07:04
我们来注意观察,诶下边呢是8000启动了,而且呢,这一块日志打印,我们当前激活的环境是prod,所以呢,相当于我们现在再要访问就必须是8000端口了,那这就是我们说的以配置文件的方式激活,但这些激活呢,我们现在有这么几个规则,第一种默认情况下,这个application pro properties,不带任何标识的,这叫默认配置文件,然后呢,默认配置文件永远都会加载,然后呢,接下来我们在默认配置文件里边指定这个我们要激活哪个配置环境,在这儿指定激活的环境,然后呢,接下来它就会同时加载默认配置文件和我们几激活的这个环境配置文件,那将来如果在这两个文件里边存在同名配置,比如server port,那以哪个优先,肯定是以我们精确的环境标识配置文件里边优先,所以这就是我们说的规则,默认所有的这个配置文件,默认配置文件加上它的环境配置文件,他们呢。
08:05
都会加载,那加载了以后呢,默认配置文件里边的跟我们当前环境配置文件里边的同时生效,但如果呢,有同名项,那当然是我们环境配置的是优先的,所以呢,我们这个激活其实还有我们说的两种方式,第一种我可以直接在我们默认的配置文件里边改,第二种我们还可以这样做,比如我们把这个当前项目我们要打包,因为我们这个发布到服务器上,我们肯定要把它打包好,把这个项当前项目呢要打一个包。因为我们一打包的时候,我们的这个配置相当于激活就已经给固化了,我们固定的是叫生产环境,但是呢,我有时就是想切换环境怎么办。大家稍等好,现在已经打包成功,我们来看我们打成的这个包,把这个包呢,我来复制过来CTRLC,那我们直接来到我们的这一块,也不用复制,打开我文件夹锁在位置,这是我们来打成的这个炸包,那这个炸包呢,我可以来CMD来让它执行,那如果我现在来Java杠炸执行,那它肯定是来激活我们pro OD生产环境的,因为我们在默认的配置文件里边呢,我们来写了激活prod,但是呢,我现在后悔了,后悔了以后呢,如果我们每次都要改完配置文件,然后呢,我们再来打包,再来部署,那太麻烦,所以呢,我们还可以使用这种方式叫Java杠炸,我们想要执行哪个呢?
09:33
我们想要执行boot这个扎包,但是呢,我们可以给它指定我们的这个配置项,比如杠杠,我们呢,其中有一个配置项叫spring profile active,我们可以把它指定成我们现在是测试环境,等于test啊,我们来回车,那这样的话呢,我们来看,如果我以这种方式执行炸包,哪个环境被激活,大家看这个日志,我们perfect active是test,所以呢,现在是7000端口来进行访问,所以我们这个激活环境配置,你可以使用命令行的方式,你也可以直接在配置文件里边配这个命令方行的方式呢,更灵活,可以在我们部署炸包的最后一步,哎,我们后悔了,用它都可以,所以我们命令行的方式,那就是Java。
10:17
杠账什么叉叉叉这些炸包,然后呢,我们使用杠杠,然后呢,接下来我们配置文件里边的所有东西我们都可以指定,由我们指定呢,让他激活了是prod这个环境,甚至于呢,我们再来写一个杠杠,我来再来改一下,你即使呢激活了prod环境,但是你的这个name呢叫哈哈。来看一下这样的效果啊,CTRLC,我们把这个停掉停掉停掉,我们来打包,打包的时候呢,大家看我现在Java杠炸,我们来启动的时候,我把这个命令复制到这,然后呢,启动的时候把person name也也带了,然后呢,我们的这个炸包叫什么炸包,叫boot,好零九的这个炸,然后呢我们来杠杠spring spring.s.active我在这呢激活测试环境,但是呢,我们同时还把这个名字person name,我们杠杠修改为hello回车。
11:24
我们来看一下效果好,我们在这呢,看是看到确实激活的是测试环境,然后呢,7000也启动起来了,如果我们来访问7000,走,哎,我们发现呢,这个名字用的是hello,而不是配置文件里边的,所以呢,这就是我们说的,如果我们使用命令行的方式,我们其实呢命令行的方式,它呢可以修改配置文件见得任意值,然后呢,我们命令行优先,所以即使你配置文件里边已经配置了,我们在最后一步也可以修改这我们说的使用application profiles这个功能,我们来直接隔离我们生产环境,开发环境,测试环境这些配置文件,那我们只一旦到生产环境以后,我们就来激活指定的这个配置文件就行了,默认的默认配置文件和指定环境的配置文件都会加载,记住默认配置文件,默认配置文件就是不带任何环境标识。
12:25
的和咱们这个指定环境的,指定环境的配置文件都会生效,但是呢,我们指定环境的配置会覆盖默认的配置,如果有相同配置项,这么说的第一个叫profile application profile功能,第二个我们的这个PA fair功能呢,还可以用于条件装配,比如我们来举一个例子,那么现在这个哈呢,我们就让它返回这么一个东西。来准备一个B,我们专门呢把所有数据装到这个person里边,Shift f6来改一下person,假如呢,这个person我们就来读取配置文件的值,Configuration properties,它呢直接来读取配置文件里边person后边的这些所有值啊,没加这个类我们就没加,我们不用管,然后呢,我们把它放到容器中,Component,只有放到容器中这个呢才能生效,然后呢,我们来给它准备一个叫string name person呢可能有name,还有他的年龄,Inte age,比如还有他的,呃,其他信息我们就不写这么多了,我就准备上两个,然后呢,接下来我们配置文件里边,只要你配了person的东西,那我们就自动的绑定到这一块,然后我们必须加上at data get set,方法好,那现在呢,我们让hello ctrl直接返回这个person对象。
13:54
我们可以直接在这private,我们注入我们的这个person对象,因为我们已经呢把person放在容器中了,所以我直接注入at owa自动注入person对象,来我们让它呢,返回这个person对象,不返回,Hello,好,来返回person对象,那如果是这种情况下,大家来看啊,来启动我们现在呢,可以给一个,我们现在就让它激活生产环境,那生产环境呢,我们可以配一个H等于18。
14:28
来启动一下。那先来保证我们的这个person对象是没问题的。回车啊,我们来把这个测试环境的关掉,我们之前启动了,现在生产环境呢,来我们用现在默认激活的这个环境,现在是8080呢,我们来重新启动一下啊,我们来看一下我们现在呢,我们默认激活的是prod环境,那prod环境里边的端口号是8000,所以我们肯定呢启动的是8000,还给我们显示8080,原因是我们在这儿激活的时候啊,在我们把这一块注释啊,所以整个环境的名叫这么一串啊,这是错的。
15:09
注释在上边好。重新启动。好,激活prod环境,现在呢是8000,我来访问8000就行,好,现在8000我们返回的这个人是张三H是18,但是呢,我现在希望是这样子的,比如呢,我们把这个person我重新变一下,我们person呢变成接口,这个person呢有两个东西,一个是boss,一个是老板,另外呢,一个是我们的这个worker啊工人,那接下来呢,我们这个person我现在给它变成一个接口interface,那这个person里边,好,我把这个全部去掉,我们让老板呢实现person接口。
16:00
实现person接口,然后呢,我们让worker呢也来实现person接口,然后呢,再来接下来我让hello ctrler自动注入person,然后呢给我返回person的这个数据,但是呢,我希望的是什么?那我希望呢,如果是我们的这个老板的情况下,比如我们person里边,当然我们可以规定get我们的这个name方法,相当于是获取他的这个名字string get name,还有呢来,String不是string,是get,我们准备了一个名字,那如果是我们这个老板,那老板呢,他呢就有相关的这个名字,包括有get set方法,那我们就直接把这两个呢都准备好,Private name和private string integer age,同样如果呢,你是员工,你。
17:00
也有你的这个信息,那直接at data1标注就行,At data1标注,然后呢,我们在这一块boss里边这两个呢,也不用重写了,那at data1标注,它的get方法就自动写了,好,我现在呢,相当于准备了两个组件,这两个组件呢,都是绑定我们配置文件里边,比如我们这个boss这个组件,它呢也是绑定我们配置文件里边person配置下的所有,我们把它呢放到容器中,然后呢,我们这个worker呢,它也是绑定我们person下边的所有,Person下边的所有,然后呢把它放到容器中,但是呢,我希望是这样子的,如果是如果我们当前环境是生产环境,我们就让它给我们环境里边放的person是一个老板,如果呢当前是测试环境,那就放的是一个worker,那怎么办?我们就可以使用at profile,什么叫呢?那就是。
18:00
激活,那这个环境里边呢,我来指定指定prod环境的情况下,这个才生效,对吧,那我们再来指定and我们的profile,这个呢,是test环境下我们才生效,所以这是我们说的,甚至于呢,我们以前还做过一些配置类。比如conflict,比如my conflict,我们来at一个conflict,我们配置类里边呢,有可能也会at b应给容器中放一些组件,比如我们再来,我来放一个别的东西吧。在这儿还准备一个color这个颜色,好,那如果呢,我们是my con,我呢可能会给呃容器中放一个这个颜色,然后呢,比如这是红色的,但这个红色呢,我们希望这个红色的这个颜色它呢应该是在生产环境才放的,所以我们就可以写pro直接prod,然后呢,我们红色如果是绿色呢,我们在开发呃测试环境放的,比如green瑞,那所以呢,我们就可以来使用破费标注破飞呢,不能不仅能标在肋上,还能标在这个方法上,如果标在肋上,也就说只有是我们指定的环境以后,下边的所有才生效,标在方法上呢,那就是我们指定的环境,我们这个方法的组件就会生效,这都是啊,没问题的效,我们可以来启动测试一下。
19:30
我们现在看到的是我们给容器中放work还是放boss是要看情况的,如果呢是我们的这个prod环境,那我们就放的是boss,那如果是我们的test环境,我们就放的是worker,所以我们接下来可以来看一下我们在这来返回,返回的这个person到底是什么啊,我们可以给大家重新string person,点一个get class。我们让他看一下啊,class.to string to string,我们让大家来实际的看一下我们容器中的我们注入的这个person组件到底是一个什么组件。
20:14
来刷新,哎,我们发现呢,这是一个boss,这个是boss的原因是因为我们当前激活的,当前激活的是prod环境,如果我来激活的是test环境走。那探测环境呢,我们这个worker,哎,我们发现这个profile指定我们这个worker呢就会生效,再来看一下,因为探索环境这个好像访问端口都变了啊,7000访问7000走啊,那变成了我卡没问题,包括如果大家想要访问color也是一样的,那生产环境跟我们的这个测试环境就会有不一样的效果,好这是我们说的第二种profile fair的使用,我们使用直接使用在条件装配的环节,还有第三个我们profile呢,也能完成profile的分组,Profile分组功能呢,当然大家也可以来参照参照,我们这一块呢,有一个profile groups,我们可以来定义一个自己的组,组名呢随便起,然后呢,类似于我这个组下会加载第一种环境,加载第二种环境,接下来呢,我要激活就是来激活这个组,好,接下来比如我们在这来测试我么现在呢,有两个环境配置,一个是PT,一个是test,好我把这两个环境配置呢,我可以再加一个环境。
21:35
配置加application让。PPT对我们随便来写一个点一个压面走,然后呢,在这个页面里边呢,我们接下来我可以来配置一个person,点一个name,等于hello,然后呢,我们在我们在application这个proper里边,我可以这么来写,不是点一个pro,点一个group。
22:06
我们把这一块呢,复制过来,因为它已经没有提示了,Pro group,相当于呢,我在这给你指定了一个分组,将来组名怎么叫,比如呢,我认为组名叫my p rud,我的生产环境的这个组,我生产环境组里边需要加载第一种环境标识的配置文件叫PPD,然后呢,我生产环境组的还需要加载第二种配置文件叫什么呢?叫prod,那相当于我呢,同时会加载两个配置文件,那为了这个好用,期间我可以在prod里边只配置一个name,我可以在PPD里边再来配置一个H,等于咱们的这个18。19吧,好,我来准备了一个啊,这两个呢,现在形成了互补配置,然后呢,我在这说我们的这个马POD组,它呢叫PP,呃,PPD,还有叫POD,然后呢,我可以再来分组,比如呢有个my test组,我的测试组。
23:10
我的测试组里边呢,会有一个配置文件,就叫test,然后呢,那接下来我就可以让他指定激活,激活谁呢?我激活my pro OD这个组,那我这样呢,一激活以后,像这个组下的两个环境标识全部加载进来,PPD和pro OD,这就是批量加载的的这两个好我们来测试一下。走。启动起来,那为了这个测试这个好看起见,我们直接把这个person,现在呢,又不打印这个class了,我们可以直接给大家返回person对象。因为person里边会注入职,就叫。好,我们现在来看一下效果。
24:05
好,我们现在呢一分组,我们现在来看,我们当前这个环境激活的是马prod这个组,但这个组里边呢,包含PPD和prod,所以呢,我们这个PPD和prod也会加载进来,这个这个加载进来,这两个一加载呢,Person的值就算是全了,我们可以来访问一下,那我们当前呢,是我们激活的是这个组prod,那就是8000端口。来访问8000下的person走好,我们会看到PD张三加载进来,Anyh没有加载进来,原因是什么啊,我们在这个PD这写错了啊,我们这个牙面语法呢是P冒号H等于,比如我们来写个20走。那么激活上一个组,买prod,把它这个组里边的所有环境标识的配置文件全部加载进来,来刷新,好,现在呢就没问题,这就是我们说的配置分组,那这几个呢,都是我们在线上生产环境里边我们非常常用的一些功能。
我来说两句