(二)Spring Boot配置

1、配置文件

Spring Boot使用一个全局的配置文件,额皮质文件名是固定的;

  • application.properties
  • application.yml

配置文件的作用:修改SpringBoot自动配置的默认值;SpringBoot在底层都给我们自动配置好;

YAML(YAML Ain‘t Markup Language)

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

  YAML isn‘t Markup Language:不是一个标记语言;

标记语言:

  以前的配置文件;大多使用的是 xxx.xml文件;

  YAML: yml是YAML(YAML Ain‘t Markup Language)语言的文件,以数据为中心,比json、xml等更适合做配置文件,http://www.yaml.org/参考语法规范

  YAML:配置示例

1 server:
2   port: 8081

  XML:

1 <server>
2     <port>8081</port>
3 </server>

配置文件放在src/main/resources目录或者类路径/config下

全局配置文件的可以对一些默认配置值进行修改

2、YAML语法

1.基本语法

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

  以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的

server:
    port: 8081
    path: /hello

  属性和值也是大小写敏感;

2.值的写法

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

    k:(空格)v:字面直接来写;

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

      "":双引号;不会转义字符里面的特殊字符串;特殊字符会作为本身想表示的意思

        name: "zhangsan \n lisi";输出:zhangsan 换行 lisi

      ‘‘:单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据

        name: "zhangsan \n lisi";输出:zhangsan \n lisi

  对象(属性和值)(键值对);

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

      对象还是k: v的方式

      

1 friends:
2   lastName: zhangsan
3   age: 20

    行内写法:

1 friends: {lastName: zhangsan,age: 18}

  数组(List,Set)

  用- 值标书数组中的一个元素

1 pets:
2  - cat
3  - dog
4  - pig

  行内写法

pets: [cat,pig,dog]

3.配置文件值注入

配置文件

 1 person:
 2   lastName: zhangsan
 3   age: 18
 4   boss: false
 5   birth: 2017/12/12
 6   maps: {k1: v1,k2: 12}
 7   lists:
 8    - lisi
 9    - zhaoliu
10   dog:
11    name: 小狗
12    age: 2

javaBean:

 1 /**
 2  * 将配置文件中配置的每一个属性的值,映射到这个组件中
 3  *
 4  * @ConfigurationProperties: 告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
 5  *  prefix = "person" :配置文件中哪个下面的所有属性进行一一映射
 6  *
 7  * 只有这个组件是容器中的组件,才能提供的@ConfigurationProperties功能
 8  */
 9 @Component
10 @ConfigurationProperties(prefix = "person")
11 public class Person {
12
13     private String lastName;
14     private Integer age;
15     private Boolean boss;
16     private Date birth;
17
18     private Map<String, Object> maps;
19     private List<Object> lists;
20     private Dog dog;

我们可以导入配置文件处理器,以后编写配置就有提示了

1 <!-- 导入配置文件处理器,配置文件进行绑定就会有提示-->
2 <dependency>
3     <groupId>org.springframework.boot</groupId>
4     <artifactId>spring-boot-configuration-processor</artifactId>
5     <optional>true</optional>
6 </dependency>            

properties配置文件在idea中默认utf-8可能会乱码

@Value获取值和@ConfigurationProperties比较

  @ConfigurationProperties @Value
功能 批量注入配置文件中的属性 一个个指定
松散绑定(松散语法) 支持 不支持
SpEL 不支持 支持
JSR303数据校验 支持 不支持
复杂类型封装 支持 不支持

配置文件yml还是properties他们都能获取到值;

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

如果说,我们专门编写了一个javaBen来和配置文件进行映射,我们就直接使用@ConfigurationProperties;

@PropertySource&@ImportResource

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

 1 /**
 2  * 将配置文件中配置的每一个属性的值,映射到这个组件中
 3  *
 4  * @ConfigurationProperties: 告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定;
 5  *  prefix = "person" :配置文件中哪个下面的所有属性进行一一映射
 6  *
 7  * 只有这个组件是容器中的组件,才能提供的@ConfigurationProperties功能
 8  * @ConfigurationProperties(prefix = "person")默认从全局配置文件中取值
 9  */
10 @PropertySource(value = {"classpath:person.properties"})
11 @Component
12 @ConfigurationProperties(prefix = "person")
13 //@Validated
14 public class Person {
15
16     /**
17      * <bean class="Person">
18      *  <property name="lastName" value="字面量/${key}从环境变量、配置文件中获取值/#{SpEl}"></property>
19      * </bean>
20      */
21
22     //lastName必须是邮箱格式
23     //@Email
24     //@Value("${person.last-name}")
25     private String lastName;
26     //@Value("#{11*2}")
27     private Integer age;
28     //@Value("true")
29     private Boolean boss;
30     private Date birth;
31
32     private Map<String, Object> maps;
33     private List<Object> lists;
34     private Dog dog;

  @ImportResource: 导入Spring的配置文件,让配置文件里面的内容生效;

  Spring Boot里面没有Spring的配置文件,我们自己编写的配置文件,也不能自动识别;

  不来编写Spring的配置文件

1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
5
6     <bean id="helloService" class="com.young.springboot.service.HelloService"></bean>
7
8 </beans>

  想让Spring的配置文件生效,加载进来;@ImportResource标注在一个配置类上

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

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

  1.配置类=====Spring配置文件

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

 1 /**
 2  * @Configuration: 指明当前类是一个配置类;就是来替代之前的Spring配置文件
 3  *
 4  * 在配置文件中<bean></bean>标签添加组件
 5  */
 6 @Configuration
 7 public class MyAppConfig {
 8
 9     //将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名
10     @Bean
11     public HelloService helloService(){
12         System.out.println("配置类@Bean给容器中添加组件了...");
13         return new HelloService();
14     }
15
16 }

  配置文件占位符

  1.随机数

1 ${random.value}、${random.int}、${random.long}
2 ${random.int(10)}、${random.int[1024,65536]}

  2.占位符获取之前配置的值,如果没有可以是用:指定默认值

1 person.last-name=张三${random.uuid}
2 person.age=${random.int}
3 person.birth=2017/12/15
4 person.boss=false
5 person.maps.k1=v1
6 person.maps.k2=v2
7 person.lists=a,b,c
8 person.dog.name=${person.hello:hello}_dog
9 person.dog.age=15

Profile

  1.多Profile文件

  我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml

  默认使用application.properties的配置;

  2.yml支持多文档块方式

 1 server:
 2   port: 8081
 3 spring:
 4   profiles:
 5     active: prod
 6 ---
 7 server:
 8   port: 8083
 9 spring:
10   profiles: dev
11 ---
12 server:
13   port: 8084
14 spring:
15   profiles: prod #指定属于哪个环境

  3.激活指定profile

    a.在配置文件中指定 spring.profiles.active=dev

    b.命令行:

     java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev;可以直接在测试的时候;配置传入命令行参数

    c.虚拟机参数:

      -Dspring.profile.active=dev

配置文件加载位置

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

- file:../config/

- file:./

- classpath:/config/

- classpath:/

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

SpringBoot会从四个位置全部加载主配置文件;互补配置;

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

项目打包好以后,我们可以使用命令行参数的形式,启动项目的时候来指定配置文件的新位置,指定配置文件和默认加载的这些配置文件共同其作用形成互补配置

原文地址:https://www.cnblogs.com/yang-young-young/p/9266010.html

时间: 2024-11-02 15:48:27

(二)Spring Boot配置的相关文章

Spring Boot 配置优先级顺序

http://www.cnblogs.com/softidea/p/5759180.html 一般在一个项目中,总是会有好多个环境.比如: 开发环境 -> 测试环境 -> 预发布环境 -> 生产环境 每个环境上的配置文件总是不一样的,甚至开发环境中每个开发者的环境可能也会有一点不同,配置读取可是一个让人有点伤脑筋的问题. Spring Boot提供了一种优先级配置读取的机制来帮助我们从这种困境中走出来. 常规情况下,我们都知道Spring Boot的配置会从application.pro

spring boot配置mybatis和事务管理

spring boot配置mybatis和事务管理 一.spring boot与mybatis的配置 1.首先,spring boot 配置mybatis需要的全部依赖如下: <!-- Spring Boot 启动父依赖 --> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId>

Spring boot配置多个Redis数据源操作实例

原文:https://www.jianshu.com/p/c79b65b253fa Spring boot配置多个Redis数据源操作实例 在SpringBoot是项目中整合了两个Redis的操作实例,可以增加多个: 一般在一个微服务生态群中是不会出现多个Redis中间件的,所以这种场景很少见,但也不可避免,但是不建议使用,个人建议,勿喷. 基于Maven3.0搭建,spring1.5.9.RELEASE和JDK1.8 1.新建SpringBoot项目,添加依赖 <dependency> &l

[转] Spring Boot配置多个DataSource

[From]  https://www.liaoxuefeng.com/article/001484212576147b1f07dc0ab9147a1a97662a0bd270c20000 Spring Boot配置多个DataSource 廖雪峰 / 编程 / 1-13 10:11 / 阅读: 14041 使用Spring Boot时,默认情况下,配置DataSource非常容易.Spring Boot会自动为我们配置好一个DataSource. 如果在application.yml中指定了s

IDEA中Spring boot配置热部署无效问题解决方式(转)

IDEA中Spring boot配置热部署无效问题解决方式 2018年01月31日 20:30:59 阅读数:1426 该配置方式属于通过配置devtools实现热部署 只要在pom文件中添加下面代码段即可 <!-- 热部署 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId>

spring boot系列(五)spring boot 配置spring data jpa (查询方法)

接着上面spring boot系列(四)spring boot 配置spring data jpa 保存修改方法继续做查询的测试: 1 创建UserInfo实体类,代码和https://www.cnblogs.com/kxm87/p/9273555.html中的一样. 2 创建数据库操作类相当于dao层,主要创建一个接口UserRepository,继承JpaRepository接口即可.本代码中主要都是自定义方法. 使用findXX 或者countXX(这两个不用编写sql,jpa会自动生成)

Spring Boot 配置加载顺序详解

使用 Spring Boot 会涉及到各种各样的配置,如开发.测试.线上就至少 3 套配置信息了.Spring Boot 可以轻松的帮助我们使用相同的代码就能使开发.测试.线上环境使用不同的配置. 在 Spring Boot 里面,可以使用以下几种方式来加载配置.本章内容基于 Spring Boot 2.0 进行详解. 1.properties文件: 2.YAML文件: 3.系统环境变量: 4.命令行参数: 等等-- 我们可以在 Spring Beans 里面直接使用这些配置文件中加载的值,如:

spring boot 配置全局日期类型转换器

首先自定义一个类型转换器 import org.springframework.core.convert.converter.Converter;import org.springframework.stereotype.Component; import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.Date; @Componentpublic class MyDataConvert im

Spring Boot 配置元数据指南

1. 概览 在编写 Spring Boot 应用程序时,将配置属性映射到 Java bean 上是非常有用的.但是,记录这些属性的最好方法是什么呢? 在本教程中,我们将探讨 Spring Boot Configuration Processor 和 关联的 JSON 元数据文件,该 JSON 文档记录每个属性的含义.约束等. 2. 配置元数据 作为开发人员,我们开发的大多数应用程序在某种程度上必须是可配置的.但是在通常情况下,我们并不能够真正的理解配置参数的作用,比如它有默认值,又或者是过时的,