SpringBoot
①:SpringBoot的全局配置文件有两种表达方式 .properties和.yml结尾,但是文件名必须是application,这个是在内部写死了的;SpringBoot是约定大于配置,那么这个application必须为文件名,这是一个约定。
②:使用@ConfigurationProperties(prefix=“”) 和配置文件绑定,从配置文件中注入数据。
③:使用@Value注解,对属性的单个值的注入。
④:使用@PropertiySource。我们常常将数据配置文件从全局配置文件中抽离,那么徐亚这个注解来引入数据配置文件。
⑤:使用@ImportResource。引用自定义配置文件或者系统配置文件,这个注解使用的位置在,入口类上。
⑥:使用${}自动获取随机值和引用变量。
⑦:profile配置文件
⑦:配置文件在项目不同位置的优先级问题。
8:Spring-test要与junit整合。
1 application.properties和application.yml的语法格式
application.properties:
是采用spring initialize新建SpringBoot项目时自动生成的配置文件,也是常常使用的配置格式。我们当初在Spring中配置Mysql的基础信息的时候,我们新建的是jdbc.properties文件来配置JDBC的基本属性。语法格式也就是:name=value的形式。
application.yml:
①:基本格式:key: value。注意:键值对中间值的前面必须要有至少一个空格。
②:靠键左对齐的方式区分层次结构。
③:字符串默认可以不用引号引起来。
④:对象或者Map表示方法有两种:
2 @ConfigurationProperties注解的使用
在SpringBoot中通过注解@ConfigurationProperties在全局配置文件中读取数据。新建User和Address两个entity类。并实现他们的get/set、toString方法。
3 @Value从全局配置文件获取数据
我们对User类的@ConfigurationProperties的注解去掉,在username上面添加@Value注解,如下图的对应关系。
运行测试类,如下,除了username外其他都没有赋值。
<mark>@Value和@ConfigurationProperties的区别:</mark>
①:@ConfigurationProperties:是和JavaBean的所有属性绑定;@Value是一个一个属性绑定。
②:@ConfigurationProperties:不支持spring表达式的写法;@Value支持spring的表达式的写法 ,#{12+13}
③:@ConfigurationProperties:支持复杂类型的绑定;@Value不支持复杂类型的绑定。
4 @PropertiySource读取外部属性文件
在@ConfigurationProperties和@Value是直接在全局配置文件中获取数据,但是我们将什么数据都放在全局配置文件中,那么就会显得十分的臃肿,我们会往往将他们分离出来,比如在spring中进行数据库连接池c3p0的配置的时候,我们将数据库的基础信息抽离出来,放在jdbc.properties中,并且使用<context:property-placeholder location=“classpath:jdbc.properties”/>加载;具体可以参考高并发秒杀应用:DAO层设计的数据库连接池配置那块的内容。
我们新建user.properties,将全局配置文件中的数据抽离到这个文件上来:
我们再在使用@ConfigurationProperties下面使用@PropertySource({“classpath:user.properties”}),来完成外部文件的导入。
运行测试单元得到如下数据:
5 @ImportResource引入自定义spring的配置XML文件和配置类
在Spring的使用中,当我们配置多个spring文件中时,使用如下配置文件引入。
但是在SpringBoot中默认给我们已经配置好了的,它的内部相当于有一个配置文件,那么我们想要添加配置文件,我们在SpringBoot的入口类上使用@ImportResource注解引入。
我们新建addressSpring.xml文件,我们实现xml的方式将Address注入Spring的IOC容器。
在入口类添加注解@ImportResource。运行测试类,发现能够拿到Address的对象。
配置类:在SpringBoot中,不推荐Xml来配置,希望所有的配置都能够使用注解的形式完成,@Configuration和@Bean来完成,
6 配置文件中使用随机值和引用变量
可以使用 的 形 式 引 用 , r a n d o m . v a l u e : 表 示 随 机 值 ; r a n d o m . i n t : 表 示 i n t 型 的 随 机 值 , 如 果 有 参 数 表 示 0 − n 大 小 的 随 机 值 ; r a n d o m . u u i d : 表 示 随 机 I d 值 。 使 用 {}的形式引用,random.value:表示随机值;random.int:表示int型的随机值,如果有参数表示0-n大小的随机值;random.uuid:表示随机Id值。使用 的形式引用,random.value:表示随机值;random.int:表示int型的随机值,如果有参数表示0−n大小的随机值;random.uuid:表示随机Id值。使用{}可以引用其他变量。
运行测试用例:
7 profile配置文件
我们在项目中有可能对不同的方案会配置不同的全局配置文件,但是关键的时候具体启用哪一个呢,每次都要频繁的改动就比较麻烦,所以使用到profile配置。
全局配置文件必须是application.X,这个在SpringBoot中规定死了的,但是我们可以取名问 application-name.X的配置文件,默认使用application.X,如果要使用其他配置文件时:spring.profiles.active=name,来启用。
7 SpringBoot中配置文件优先级
项目的根目录/config/、项目根目录/、类路径/config/、类路径/。这四个位置的配置文件优先级依次降低;如果这四个位置都有配置文件,那么四个配置文件都会生效,但是配置文件中相同的部分,高优先级的替换低优先级的内容。
8 Spring-test要与junit整合
我们经常将spring-test与juint进行整合使用,但是为什么要这么做呢?
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({
"classpath:applicationContext.xml"})
因为juint的运行器不能再测试方法中通过注解的方法读取外部文件。
如果这两者整合后,就可以替换junit的运行器为SpringJUnit4ClassRunner,测试方法就可以通过注解读取外部文件。