filestream 生成xml 文件时被如何让禁止转义_spring boot配置文件详解

学习SSM的时候,我们使用过xml配置文件,或者用过properties配置文件,相信各位被xml都折磨过吧!好在我们的spring boot是去xml的,这极大的解放了双手,当然我们依然需要改变一些配置来实现自己想要的功能。

dda485a46b2056ee687fe58ad4595685.png

b8c95cdea5d7a92898ffd8f2cb06e30e.png

boot中的配置文件

1a52221b39d19d1f8385839dc291594f.png  b05c77a800be5387327c8328048ecea6.png

虽然我们的spring boot没有了繁琐的xml配置文件,但是依然是有配置文件来解决一些问题的。

这里提供了两种配置文件,yaml(yam)和properties

当然这里也是有规范的,比如:SpringBoot使用一个全局的配置文件,配置文件名application是固定的;

比如:

application.propertiesapplication.ymlapplication.yaml
5e0632fa76719da00554bce527b833f9.png

两种配置文件的介绍

♥ yaml

全称为:YAML Ain't Markup Language,是一个标记语言。

在以前的配置文件,大多数是使用xml配置文件,yaml的理念是以数据为中心,相比xml,这种方式更加的适合当作配置文件。

我们来看一下这个对比(假设配置一个端口号):

xml的方式如下:

<server>  <port>8081port>server>

然后使用properties配置:server.port=8090

使用yaml配置如下:

server:  port: 8090

是不是相比较xml的方式简洁的多。

然后来详细讲解这个的语法规则:

key:(这里一定要空格,这是规定)value,yaml就是用key,value的形式配置。

这个和之前的没多大区别。但是层次关系就不一样,比如 server.port=8090,这个是以 . 作为区分层次关系,如果还有一个server里面的子项,又是server.xxx=xx,在properties中就有需要一行来配置,而yaml中:

server:  port: 8080    //注意,port:这后面是带有空格的  xxxx: xxx

这样能够一眼看出这个层次关系。是不是特别的方便!

注意:

用缩进的空格数来表示层级关系,缩进的空格数相等,就表示是同一层。

对于key,应该是没有什么问题,需要配置什么就写什么,但是value需要我们好好的注意一下:

字面量:普通的值(数字,字符串,布尔)

对于字面量我们不需要任何特殊的写法,直接是啥写啥。=比如是字符串,也不需要引号,数字直接写就好。同时对于字符串有如下的规则:

单引号:' ',会转义里面的特殊字符,就是将特殊字符直接作为字符,例如:  key: '122\nsss',输出就直接是122\nsss 

双引号:“ ”,不会转义特殊字符,也就是将原意表达,例如:  key: “122\nsss”,输出就直接是122 换行 sss

value为对象,Map形式就如下:

friends:    name: lisi    age: 12# 对象的写法和 map的写法一样# 还有一种行内写法如下,value类似json格式friends: {name: lisi,age: 12}

value为数组(List,Set等等)这个有点点区别:以 -(空格)来表示里面的值

list:  - cat  # 注意这个是用一个 “-”后面跟上一个空格在添加我们的值  - dog  - xxx# 还有一种行内写法:list: [cat,dog,xxx]

单的练习如下:(假设我们需要给一个对象从配置文件中绑定值)

这个是我们需要绑定的对象

/** * @ConfigurationProperties注解的使用:告诉springboot将这个类中的所有属性和全局配置文件中的数据进行绑定 *      prefix = "person",对应配置文件中的key, * 注意:我们获取这个对象,所以需要将这个对象加入容器@Component。同时,由于这个自动赋值的过程是由spring完 *      成,所以这个组件必须放入容器,才能被赋值 */@Setter@Getter@ToString@ConfigurationProperties(prefix = "person")@Componentpublic class Person {    private String name;    private int age;    private Map map;    private List list;    private Cat cat;}

后就是对应的配置文件如下:

person:    name: 漳卅    age: 15    map: {name: lisi,age: 33}    list:      - lisi      - sss    cat:      name: aaa      age: 11

然后我们进行测试:

@RunWith(SpringRunner.class)@SpringBootTestclass SpringBoot1ApplicationTests {    @Autowired    Person person;    @Test    void contextLoads() {        //直接输出即可        System.out.println(person);    }}

这样我们就可以从配置文件配置这个对象的属性。同时有一个小的点:

        <dependency>      <groupId>org.springframework.bootgroupId>                <artifactId>spring-boot-configuration-processorartifactId>    <optional>trueoptional>dependency>

好了,基本的yaml的写法就是这样的,自己多加练习即可!

再来看看properties的写法

♥ properties

用上面配置对象的属性为例,配置的写法不同,比如,person的属性:

person.name="张三"person.age=12person.map.key1=v1person.map.key2=v2person.list=a,b,cperson.cat.name="sss"person.cat.age=1

总的来说这两种配置文件是看个人的喜好来的,没有优略之分,个人而言,还是yml的形式比较舒服

还记得上面的例子中用到的一个注解:@ConfigurationProperties这个注解吗?这个注解就是可以绑定我们的配置文件,将名称对应的属性和配置文件中的值进行绑定。然而,我们还有一个@Value这个注解也可以向一个对象注入相应的属性。

@Value和@ConfigrationProperties

@Value@ConfigrationProperties
功能单个属性注入批量属性注入
松散绑定(也就是有点驼峰命名的意思)不支持支持
SpEl表达式支持不支持
JSR303数据校验不支持支持
复杂类型绑定不支持支持
@Setter@Getter@ToString@Componentpublic class Person {    @Value("苏丹国")    private String name;    @Value("12")    private int age;    private Map map;    private List list;    private Cat cat;}@Setter@Getter@ToString@ConfigurationProperties(prefix = "person")@Component@Validatedpublic class Person {    @Email  //加上@Validated这个注解后可以使用这个JSR303校验,    private String name;    private int age;    private Map map;    private List list;    private Cat cat;}

加上@Validated这个注解后@ConfigrationProperties配置的数据可以使用这个JSR303校验。

@Value这个注解,可以直接注入字面量(没有用表达式),也可以用${}这个来取出全局配置文件中的对应的值,还可以使用sPEl表达式。

再来看看另一个注解:

@PropertySource(value = {"classpath:person.properties"})

加载指定的配置文件中的值,如果一股脑地把所有东西都写在全局配置文件,显然,不够优雅,我们可以自己指定自己写的配置文件去加载,就用上面这个注解,还可以写多个值,加载多个配置文件。这个注解不支持加载yaml                                        

@Setter@Getter@ToString@ConfigurationProperties(prefix = "person")@Component@PropertySource(value = {"classpath:person.properties"})//@Validatedpublic class Person {    //@Email  //加上@Validated这个注解后可以使用这个JSR303校验,    private String name;    private int age;    private Map map;    private List list;    private Cat cat;}

这样加载指定的配置文件看起来就会比较清晰明朗!

同时由于我们没有了xml,用yam或者properties只能配置一些属性,如果我们需要定向的配置组件等等东西,我们可以利用spring纯注解的一个配置注解:@Configuration,这个注解的详细解释请看spring纯注解。

@Configurationpublic class MyConfig {     //加入我们需要的配置即可}
5e0632fa76719da00554bce527b833f9.png

配置文件占位符和Profile多环境支持

490247936c45013c201e71115479a725.png

配置文件占位符

配置文件占位符:可以在配置文件中引用前面配置过的属性,使用${name:默认值}来指定找不到属性时的默认值,我们也可以在配置文件中可以写一些类似Java的代码${romdan.int},这个就可以在加载配置文件的时候随机生成值。例如:

# 这样在获取这个age的时候,会随机生成一个数age=${romdan.int}# 这样就可以获取到age的配置的值,假设我们没有配置这个age属性,这个name的值变成“${age}_张三”,也就是原样输出name=${age}_张三person.birth=2017/12/15person.boss=false

Profile多环境

多个配置文件中,我们可以指定某一个生效,这样我们可以针对开发环境和生产环境进行不同的配置

格式 : application-{profile}.properties/yml,例如:

application-one.properties   application-two.properties默认使用application.properties文件的配置,可以在里面指定需要激活的环境,例如主配置文件加上这个配置spring.profiles.active=one,就指定使用application-one.properties  配置文件

yml配置文件多profile文档块模式:---  表示分割,

spring:   profiles:    active: one#active:这个表示激活也就是使用哪个文档块---server:   port: 8083spring:   profiles: two#profiles: 表示这个文档块的一个标识---server:   port: 8084spring:   profiles: one# ---分割这个文件使得上下两部分成为一个单独的文件系统,只不过写在一起而已

然后我们指定激活的方式有这么几种:

1. 就是上面的在配置文件中配置 spring.profiles.active=dev

2. 我们使用Java -jar命令的时候,指定这个生效的配置:

java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev;

3. 配置我们的虚拟机参数:-Dspring.profiles.active=dev

a67432366973b1172fc404ea6d970cad.png

补充一个小的知识点:配置文件如果放在不同的位置,这个加载的顺序。(了解即可)

springboot 启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件

–file:./config/–file:./–classpath:/config/–classpath:/

优先级由高到底,高优先级的配置会覆盖低优先级的配置;

SpringBoot会从这四个位置全部加载主配置文件,如果高优先级中配置文件属性与低优先级配置文件不冲突的属性,则会共同存在—互补配置(也就是如果高优先级配置文件没有配置,而低优先级的配置了,会自动地合并内容)。

我们还可以通过spring.config.location来改变默认的配置文件位置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值