00:00
好,上节课呢,我们给容器中注册了三组数据源啊,顺便呢,也复习了一下其他的这个用法,那我们现在能不能根据某种环境,我只激活上某个数据源呢?哎,比如测试环境,我只激活测试用的这个数据源,开发环境啊,我只用开发的这个数据源,因为在其他的这个组件里边可能要用数据源,我们需要动态激活,怎么办呢?我们就结合and profile注解,And profile注解它的作用是什么呢?比如说我们组件上会呢,用at来做一个咱们这个,呃,环境标识,如果我们当前环境被激活了,我们这个有当前环境标识的这些组件才会被注册到容器中,哎,我们来说一下,那那指定组件在哪个环境的情况下才能才能。
01:00
被注册到容器中,那我们以前的这种方式,也就说不指定,不指定就是说任何环境不指定,比如任何情况下,任何环境下都能啊注册这个组件,那么呢,我们现在用一个动态指定,比如我们这个at b,我们来用一个at profile们来说,那么呢,我们来说它就是测试环境,哎,这个标识随便写,下边呢,我们来认为它是一个开发环境,好,我们来写一个开发环境dev在下边我们来说它是一个,它是一个product,我们这个生产环境,那现在呢,定了三种环境标识,那只有当我们这个div环境被激活以后,哎,我们这个鼻才能注册进来,那么我们。
02:00
那现在默认我们来看一下啊,默认走默认呢,我们现在容器中一个鼻影都没有了,哎,因为我们每一个B都加了环境标识,来我们来说加了环境标识的B。环境标识,你只有这个环境被激活的时候才能注册到容器中,那么呢,默认呢,你可以用这个环境叫default,哎,这是一个默认环境,你不,哎你不标,这其实就是这个default环境,我们来运行一下这个test,好我们来看,然后呢,现在呢,只有这个我们标了defat才能成功呢,默认是default环是defat环节,好那么我们还来切到test,那我们怎么能在运行的时候来,我们让它测试环境切换到测试环境呢?哎,比如测试环境里边还有一些其他的组件,比如我们来注册上一个yellow yellow组件。
03:15
了好又一个了,来我们给它也标注,它也是测试环境下,好这an b以及an profile,那么在测试环境下,哎,我们这些测试环境的所有B都会被激活注册进来,那我们现在来切到测试环境,怎么切呢?我们来先来看第一种最快捷的办法,哎在这运行程序的时候,哎我们第一种使用哎使用咱们这个哎参数命令行参数的方式,动态参数,那么呢,我们在这运行的时候,我来先右键run run configuration在运行的时候呢,我们在这个参数上,我们添加一个参数叫杠底,哎固定写法,添加一个虚拟。
04:15
三基参数叫spring.profiles spring profiles里边的点就说呢,激活的,我写一个test,我们来运行走。好,大家可以看到呢,咱们这个测试数据源就进来了,那我们在运行的时候呢,我来切一切,哎,我重新变一下,我变成咱们这个bev,哎,我们这个开发来运行,哎,我们现在呢,就变成开发的数据源了,别的组件要用数据源,那就动态切成开发的数据源了,所以说呢,这是我们第一种命令行参数加上在在咱们这个虚拟机,在虚拟机参数位置,哎,加上咱们有一个加载一个叫杠d.false点等于咱们这个,我们这个环境标识加一,这是第一种办法,那这样的话呢,就会激活当前环境,第二种办法,我们使用代码的方式,代码的方式呢,我们来可以看一下a not conflict applicationest。
05:32
哎,我们写的是有参构造器,有参构造器呢,调的是这三步代码,如果我们要用代码的方式呢,哎,我们就不能写有参构造器,因为有参构造器一写,把我们这个配置类一加载在这一块,配置类注册进来,Refer容器就哎启动刷新了我们环境什么都没设置好,所以说呢,我们用无参构造器的方式,但是呢,那个过程我们还是照人家的写法好,我把这个删除,然后呢,我们来使用代码的方式,第一步我们先来创建啊IC容器创建一个application对象,然后呢,第二步,第二步我们来设置需要激活的环境,在我们容器还没启动创建其他之前,我们先来设置环境,Get environment,哎,它里边有一个叫set设置我们需要。
06:32
激活的环境,那么这个激活的环境呢,能一次设置多个,比如我们这个test,或者呢,比为我们一次设置上两个,设置好激活的环境以后呢,接下来再来注册啊,我们这个主配置类,我们把我们的这个配置类点register,我们调用register方法,Register方法把我们这个man con注册进去,然后注册完了以后,我们第四步,然后呢,启动刷新武器开第二调用方法,相当于就是我们刚才看的那个有参构造起,有参构造起这的这三步,第一步先无参创建对象,第二步注册,第三步刷新,们把这三步呢,我们用代码的方式来写出来,只不过呢,在做其他步骤之前,哎,我们呢,先给它设置好环境,那现在呢,设置好了测试跟开发环境。
07:32
现在来看走那么呢,测试跟开发的这个data source就出来了,我把这个测试我删掉,测试删掉,测试删掉啊,我们来重新运行,走那么呢,你看就只剩开发环境了,也就说我们第二种也可以用代码的方式激活某个环境,激活啊某种环境,这是我们说的at prefer注解的作用,也就是说呢,我们利用prefer给咱们这个B上一标注,那么这个B呢,只会在当前环境里边起作用,那么接下来我们来可以看一下啊,我把这个破fair除过写在病上,我们还可以写在这个类上,来说一下写在泪上,写在泪上的效果是什么呢?也就是说我们写在泪上,只有当是这个环境的情况下,整个这个类里边。
08:32
和其他配置才能生效,只有是咱们这个写在类上,写在咱们这个配置类上面,只有是咱们这个指定的环境,环境的时候,整个配置类,整个配置类里面的所有配置才能生效,所有配置才能开始生效,也就说呢,我现在把这个test写在这,那我以开发环境来进行运行,我们来在这儿好,正好是开发环境,我们看容器中还有我们这个data source吗?你们看是不是已经没有了,没有的原因是什么呢?这是因为诶我们在整个类上写了这个test,如果是开发环境,整个类都不会加载它,自然这些创建B竟也不会加载,包括呢,虽然你说这是在开发环境,但是。
09:32
由于整个配置类都没加载,所以说它也就没加载,所以说呢,这是我们用at来动态的来指定切换环境,当然最后我们要说的就说呢,没有没有,就是我们说的没有标注咱们这个环境标识的B,没有标注环境标识到B,在任何环境下,任何环境下都是加载好,我们呢,还是给它切换到测试环境,我们切换到测试环境,然后呢,我们来打印IOC容器中的所有B啊,我们来打印一下所有的,因为我们还注册了一个yellow,那我们就直接从容器中获取yellow,加上酸yellow,我们看这个yellow是不是随着别人走呢,好,那么呢。
10:32
我们当然不能加在泪上,加在整个泪都不起作用了,好,我们现在呢,我们激活测试环境,但是呢,我们这个yellow并没有任何环境指定,我们在这儿进行测试,看有没有这个yellow,走我们会发现是有yellow的,你不管是激活测试环境还是开发环境,还是其他环境,我们这些没有指定环境标识的B,哎,都会被加载。
11:01
当然前提是我们整个配置类生效的情况啊,这是我们说的咱们这个B使用。
我来说两句