Guns第六节springboot实战
相信大家看完前面的课程,已经对springboot有个基本的了解,这个课以guns项目为例,结合Guns项目说一下实际项目中springboot都有哪些应用
当classpath中含有JdbcTemplate和PlatformTransactionManager这个类的时候,会**这个类的配置,然后具体再看下面,当我们的spring程序里面没有配置PlatfromTransactionManager的时候它就会**下面的配置,所以说如何覆盖下面的配置呢?我们显式地声明一个ConditionalOnMissingBean,那么这面这段代码就不会**。非常简单,我们直接把这个bean直接写到配置里面,那么上面那段代码就不会被**了.这段代码已经写好了在,
大家看一下我直接生成一个
,大家可以看到这个类
,他是实现了
,所以说声明之后,在我们的spring项目里面就有这个bean了,所以说就会把它覆盖掉,
。
覆盖以后,大家就可以在这里面写自己想要的配置了,这样就起到了一个覆盖的作用.
然后就是当spring程序里面没有自动配置的一个bean的时候,如何如何创建自己需要的配置,这种情况大家可以根据这个,可以看到项目里面以config结尾的都是自己创建的一个配置吧,相当于自己配置的一些属性,然后这些配置是自动配置里面所没有的,所以说我们如何自己进行自定义的bean的配置呢?大家可以参考。这样的一个形式就是创建一个类,然后这个类放在config包下,这个必须放在config包下,因为它去扫描配置的时候,它会找Application所在同一级目录下config包下的这些配置
,所以说需要放到config包下,然后配置的时候创建一个类,这个类药加上
,这个注解其实就起到一个
的作用,
这个里面可以看到包含了
,
的意思就是把它当作spring的容器,把它注入到spring容器里面,然后加上
之后,这些
是特殊的配置,一般的配置需要加上自己的一些注解,然后标准的配置就是这样写
,然后在Config类里面声明一些类,比如说生成一个数据源的bean
,这样的写法
就是创建了一个自己需要的配置,这样就是一个标准的写法,装载了一个bean,然后这样子的写法一般在xml中的形式是这样的
,他们两者是相等的。在写springboot的时候都是用
来配置。
然后接下来
这个意思其实就是大家常用的application.yml通过外置的一些属性来配置我们的整个springboot程序。
外置配置的形式有哪些?
以jar包的形式运行springboot程序
,这个--后面其实就是命令行参数的形式外置springboot这些配置。比如说我们刚才的一个例子就是写的这样一个效果:把spring.prifiles.active当前**的profile改成了dev
,直接执行的时候,就会带上这个参数给这个springboot程序。然后第二种就是
,当系统执行的时候比如生成的时候就会加一些jvm参数,类似于这样的一个用法
,
可以在这个参数上加上spring的这些配置。
第三种,指的是我们的电脑高级系统环境变量里面,你可以加一些springboot的配置,
,这些都可以加到系统环境变量里面。
剩下的就是,这样的文件配置可以有两个配置:
一种是应用程序外的properties,举个例子比如说:我们的程序打好包之后叫guns.jar.我们可以跟他同一个目录放一个application.yml,用这个文件
配置我们的java程序,这样也是可以的,然后他有一个优先级的顺序高低,优先级从高到低第一个优先级最高,下边的其次,最低的是在
,这个
就是应用程序以内的,意思就是说你用命令行参数的形式配置了一个参数
那么这个8080会覆盖掉这个80.
这个就是配置内置的tomcat服务器,
。。
,
。
,devtools是我们开发的时候用到的热部署工具,并且程序运行起来,改了这些配置,那么程序会帮你重新启动程序。从而达到一个修改即生效的效果。
。
然后,
,
还有,
,等等300多个属性,所以说springboot内置了很多可微调的一些属性,大家通过这么多个微调的属性来控制程序的变化,
我们可以利用这种机制,下面举个例子,比如说我们通过这种机制,来配置我们的一些属性,比如guns常用的这些开关,我们可以用配置文件加入自己的一些配置,然后这些东西
是怎么注入到我们的java类里面的。然后下面介绍一下,比如说这一段guns开头的自定义配置
,这些东西不是spring自带的,是我们自己加的,然后它是怎么注入到我们的属性里面的,大家可以看到,你可以建立一个properties这样的文件,这个类名它是没有要求的,我一般习惯是以Properties结尾来说明这些Properties是通过application.yml里面拿到的,这些属性是通过yml里面拿到的。然后如何使用呢?就是创建一个这样的类,然后类上面加上一个
,这个注解就是说把这个类交给spring容器管理,它就是一个spring里面的springbean。当程序启动之后,它就是spring的一个bean,然后加上这样一个注解
,这个注解它就可以帮你读相关的这些配置,然后自动帮你注入到这个里面,大家可以看一下,它需要你配置一个前缀,这个prefix呢,就是这个
,prefix设置之后呢,它就会读取前缀是这个
,前缀是guns,它就会读前缀是guns的这些配置
,然后一一地读到这些属性里面
,然后大家可以看到这些属性的名称是一一对应的,
,
.
然后还有一点就是它可以帮你这种形式,变量的形式横线“-”和驼峰的转化,它会自动帮你转化,比如说这里面是驼峰方式转化的变量,然后这里面写的是横线
,当然这里面也可以写成驼峰,我是为了看起来直观一些,所以说就用横线了,然后就是它可以自动给我们做驼峰跟横线一个转化。
然后说一下怎么调用,我们看一下哪里调用它了?,比如说这里面,ToolUtil里面调了一个
kaptchOpen是否开启验证码,然后调用的时候呢,也很简单,就是从spring容器里面拿到这个bean,拿到这个properties结尾的这个bean
,然后获取相应的属性,
,然后看到我这里呢,它是用这样的形式,这样的方式拿到springbean,其实很多种拿到springbean的方式,
因为这个ToolUtil,它不是spring容器中的一个bean,他没有加Component的注解,它是一个普通的静态类,所以说我通过这样的一个方式拿这个bean
,举个例子,如果说你在这个service里面,Service是spring容器里面的一个bean,你就可以直接通过这样的方式
拿到这个bean,这个里面可以调用getKaptchaOpen()拿到这个值了,所以说分两步,一步拿到这个bean,第二步调用相关的值
。
可以设想一下,有一个这样的情形,就是当你开发的时候,你的数据库连接是localhost账号密码都是root,然后呢,这个是开发环境的配置,我相信正式环境上一定不是这样配置的,正式环境的profile里面的账号和密码是一长串字符
,那我们平时假如说没有profile的话,当然是需要手动来改的,每次上线的时候把它改一下,会很麻烦。这就是我们用spring profile的原因
。
第一个上面是所有环境共用的配置,下面就可以配置不用的环境了。
怎么用呢?第一步加横线,第二步写profile的名称,比如说你想新建一个开发环境的profile,你就可以写一个dev,那么它就是这个profile的名称,然后下面就是datasource配置了,像datasource这些配置,还有logging。然后下边再写一个横杠。
你当前用的是哪一个profile,你需要告诉springboot程序,在哪儿告诉呢?,当前**哪个profile,这个名字一定要跟下面的某一个名字相同。
。
比如说我要建一个生产环境的profile,
这个是开发环境的,
怎么让服务器跳转到这个页面,这里介绍一下,
配置一个这样的东西,
这个controller会返回404页面,