博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Springboot配置(上)
阅读量:5908 次
发布时间:2019-06-19

本文共 6242 字,大约阅读时间需要 20 分钟。

一、配置文件

—Springboot使用一个全局的配置文件,配置文件名是固定的,有如下两种方式:

    - application.propertis

    - application.yal

—配置文件放在src/java/resources目录下

— .yml是YAML(YAML Ain't Markup Language)语言的文件,

    - YAML A Markup Language:是一个标记语言

    - YAML isn't Markup Language:不是一个标记语言

    标记语言:

    - 以前的配置文件,大多数是使用xxxx.xml文件

    - YAML:以数据为中心,比json、xml更适合做配置文件

—作用:全局配置文件可以对一些默认的配置值进行修改。Springboot在底层都给我们自动配置好了。

    - application.propertis

server.port=8090

    - application.yal

server:  port: 8090
二、YAML语法

1、YAML基本语法

k:(空格)v   -- 表示一对键值对(空格必须有)

—使用缩进表示层级关系

—缩进时不允许使用tab键,只允许使用空格键

—缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

server:  port: 8090  path: /hello

—大小写敏感

2、YAML支持的三种数据结构

—对象、Map:键值对的集合

    k: v--在下一行来写对象属性和值的关系;注意缩进

        对象还是k: v的方式

        如:

friends:        lastName: zh        age: 20

        行内写法:

friends:{lastName: zh,age: 20}

—数组(List、Set):一组按次序排列的值、

    用 -值 表示数组中的一个元素

pets:   - dog   - cat

行内写法:

pets:[dog,cat]

—字面量:单个的,不可再分的值(数字、字符串、布尔)

    k: v--字面直接写

             字符串默认不用加上单引号或者双引号

           “”:不会转义字符串里面的特殊字符;特殊字符会作为本身想表达的意思

                     name: "zh \n li";输出:zh 换行 li

          ‘’:会转义特殊字符,特殊字符最终只是一个普通的字符串数据。

                     name: 'zh \n li';输出:zh \n li

三、YAML值获取

.yml文件中的配置:

person:  name: zh  age: 20  birth: 2018/02/09  maps: {k1:v1,k2:v2}  lists:    - lisi    - zhaoliu  dog:   name: 小狗   age: 2

将yml中的值与实体类中的属性进行映射绑定

/** * 将配置文件中的每一个属性的值,映射到这个组件中 * @ConfigurationProperties:告诉Springboot将本类中的所有属性和配置文件中的相关配置进行绑定 *      prefix = "person":配置文件中哪个下面的所有属性进行一一映射 * 只有这个组件是容器中的组件才能使用容器提供的@ConfigurationProperties功能 */@Component@ConfigurationProperties(prefix = "person")public class Person {    private String name;    private Integer age;    private Date birth;    private Map
maps; private List
lists; private Dog dog; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Date getBirth() { return birth; } public void setBirth(Date birth) { this.birth = birth; } public Map
getMaps() { return maps; } public void setMaps(Map
maps) { this.maps = maps; } public List
getLists() { return lists; } public void setLists(List lists) { this.lists = lists; } public Dog getDog() { return dog; } public void setDog(Dog dog) { this.dog = dog; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", birth=" + birth + ", maps=" + maps + ", lists=" + lists + ", dog=" + dog + '}'; }}

需要配置一个配置文件处理器的依赖:

org.springframework.boot
spring-boot-configuration-processor
true
四、property获取值

使用property文件获取值除了配置文件变化,其他都不需要变化

# 配置person的值person.name=李四person.age=21person.birth=2018/09/09person.maps.k1=11person.maps.k2=12person.lists=a,b,cperson.dog.name=小狗person.dog.age=3

但是使用property配置文件会出现乱码的问题:

默认IDEA的property使用的是utf-8

在设置中改变编码方式:

五、另一种从配置文件中获取值的方式

@Component//@ConfigurationProperties(prefix = "person")public class Person {    /**     * @Value相当于     * 
*
*
*/ @Value("${person.name}") private String name; @Value("#{11*2}") private Integer age; private Date birth; private Map
maps; private List
lists; private Dog dog;

1、其中@Value和@ConfigurationProperties获取值的比较

@ConfigurationProperties
@Value
功能
批量注入配置文件中的属性 一个一个设置
松散绑定(松散语法)
支持 不支持
SPEL表达式 支持 不支持

JSR303数据校验

支持 不支持

关于复杂数据类型,@ConfigurationProperties是支持的,@Value是不支持的

yml和property都能获取到值。

关于使用场景:

如果我们只是在某个业务逻辑中需要获取一下配置文件的某项属性值,我们就使用@Value。

@ResponseBody@Controllerpublic class HelloController {    @Value("${person.name}")    private String name;    @RequestMapping("/sayHello")    public String sayHello(){        return "hello "+name;    }}
如果我们专门编写了一个JavaBean来和配置文件进行映射,我们就使用
@
ConfigurationProperties

2、数据校验

@Component@ConfigurationProperties(prefix = "person")@Validatedpublic class Person {    /**     * @Value相当于     * 
*
*
*/ @Email//名字必须是邮箱格式 //@Value("${person.name}") private String name; //@Value("#{11*2}") private Integer age; private Date birth; private Map
maps; private List
lists; private Dog dog;
六、@PropertySource&@ImportResource

@PropertySource:加载指定的配置文件

@PropertySource(value = {
"classpath:person.properties"})@Component@ConfigurationProperties(prefix = "person")//@Validatedpublic class Person { /** * @Value相当于 *
*
*
*/ //@Email//名字必须是邮箱格式 //@Value("${person.name}") private String name; //@Value("#{11*2}") private Integer age; private Date birth; private Map
maps; private List
lists; private Dog dog;
@ImportResource:导入Spring的配置文件,让配置文件中的内容生效。

Springboot中没有Spring的配置文件,我们自己编写的配置文件也不能自动识别,想让Spring的配置文件生效,加载进来,需要将@ImportResource标注在一个配置类上。

@ImportResource(locations = "classpath:beans.xml")--导入Spring的配置文件让其生效

不来编写Spring的配置文件:

Springboot推荐给容器中添加组件的方式:
推荐使用全注解的方式

1、配置类-----Spring配置文件

2、使用@Bean给容器中添加组件

/** * @Configuration指明当前类是一个配置类,就是来替代之前的Spring配置文件 * 在配置文件中使用
标签添加组件 */@Configurationpublic class MyAppConfig { //作用就是将方法的返回值添加到容器中,容器中这个组件默认的id就是方法名 @Bean public HelloService helloService(){ System.out.println("配置类@Bean给容器中添加组件了"); return new HelloService(); }}
七、配置文件的占位符

1、配置文件中可以使用Springboot提供的随机数

${random.value}、${random.int}------

2、占位符获取之前配置的值,如果没有可以使用“:”(冒号)指定默认值

 
# 设置person的值ֵperson.name=张三${
random.uuid}person.age=${
random.int}person.birth=2018/09/09person.maps.k1=11person.maps.k2=12person.lists=a,b,cperson.dog.name=${
person.name}_小狗person.dog.age=3
八、Profile

Profile是Spring对不同环境提供不同配置功能的支持,可以通过激活、指定参数等方式快速切换环境。

1、多Profile文件形式:

— 格式:application-{profile}.properties:

    - application-dev.properties/.yml

    - application-prod.properties/.yml

默认使用主配置:application.properties的配置

2、多Profile文档块模式 :

    —yml中可以使用文档块的方式(就是三个横线)

server:  port: 8090spring:  profiles:    active: dev---server:  port: 8091spring:  profiles: dev---server:  port: 8092spring:  profiles: prod  #指定属于哪个环境

3、激活方式:

    — 命令行 -- spring.profile.active=dev

    — 配置文件   spring.profile.active=dev

    — JVM参数   -Dspring.profile.active=dev    

转载于:https://www.cnblogs.com/huangzhe1515023110/p/9276033.html

你可能感兴趣的文章
精通Java设计模式从初见到相爱之命令设计模式(15)
查看>>
串口异步同步通讯
查看>>
程序与生活:忘记目标你才能达到目标
查看>>
asd
查看>>
MySQL数据库性能优化的实际操作方案
查看>>
idea generate persistence mapping 生成dao bean实例
查看>>
linux sar命令详解
查看>>
阿里云提示ecshop Discuz uc.key泄露导致代码注入漏洞修复
查看>>
关于STUN和NAT
查看>>
常见JVM内存异常分析
查看>>
针对不同浏览器内核css写法
查看>>
ubuntu下添加gimp的ppa
查看>>
使用Java8实现自己的个性化搜索引擎
查看>>
龙家贰少的MarkDown学习笔记
查看>>
查看端口占用命令
查看>>
arm9时钟及定时器
查看>>
vi 常用命令
查看>>
抓包工具Charles
查看>>
码云项目100,水一发
查看>>
CLRS 4.2 Exercises
查看>>