Spring-boot入门之配置详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/oXinYangonly/article/details/79736378

1.配置文件

spring-boot默认有两种配置文件

  • appliation.properties
  • appliation.yml
    配置文件默认放在src/main/resources目录或者是类路径/config

配置文件的作用:修改spring-boot自动配置的默认值

2.YAML

.yml 即YAML

YAML Ain’t Markup Language

传统的java项目中,多使用xml文件,而YAML文件以数据为中心,比json、xml更加适合做配置文件,更加简洁
- YAML配置范例

server:
  port: 7900
  • xml配置范例
<server>
    <port>7900</port>
</server>

对比之下,我们可以看到,使用YAML要更加的简洁方便

3.YAML语法

  • 基本语法
    k:(空格)V 表示一对键值对(空格必须要有)
    空格的缩进来控制层级关系,只要左对齐的一列数据都是同一层级的
server:
    port: 8080
    path: /api

上述代码中,port和path为同一层级的

属性和值严格区分大小写

  • 值的写法
字面量: 普通的值(数字、字符串、布尔)
k: v
字面量直接来写
字符串默认不加上单引号或双引号

双引号不会转义字符串里面的特殊字符,特殊字符会作为本身想要表示的意思
如 name: "zhagnsan \n lisi" 结果:zhangsan 换行 lisi

单引号会转义字符串里的特殊字符,特殊字符最终只是一个普通的字符串数据
如 name: 'zhagnsan \n lisi' 结果:zhangsan \n lisi
对象、Map(属性和值、键值对)

k: v 在下一行来写对象的属性和值得关系,只需要注意缩进即可

user:
    name: zhangsan
    age: 20

行内写法

user: {name: zhangsan,age: 20}
数组

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

pets: 
    - cat
    - dog
    - pig

行内写法

pets: [cat,dog,pig]

4.spring-boot中使用yml

  • 添加依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>
  • 编写两个类
@Component
@ConfigurationProperties(prefix="user")
public class User {

    private String lastName;

    private Integer age;

    private Boolean boss;

    private Date birth;

    private Map<String,Object> maps;
    private List<Object> lists;

    private Dog dog;
    //getter 和setter
}

public class Dog {

    private String name;

    private Integer age;
    //getter 和 setter
}
  • 文件中配置信息
user:
  lastName: zhangsan
  age: 18
  boss: false
  birth: 2017/12/12
  maps: {k1: v1,k2: 12}
  lists: 
   - lisi
   - hello
   - zhaoliu
  dog:
    name: kitty
    age: 1

@ConfigurationProperties 告诉spring-boot将本类中的所有属性和配置文件中的相关配置进行绑定
prefix=”user” 配置文件中哪个下面的属性进行一一映射
只有容器中的类,spring-boot才会绑定配置文件中的信息,所以要使用 @Component 生命其实一个spring 的bean

  • 测试
@RunWith(SpringRunner.class)
@SpringBootTest
public class ApplicationTests {

    @Autowired
    private User user;

    @Test
    public void contextLoads() {

        System.out.println(user);
    }

}

执行单元测试,执行结果中发现,配置文件中的信息已经绑定到了User 的属性中

5.spring-boot中使用properties文件配置信息

user.last-name=张三
user.age=18
user.boss=false
user.maps.k1=v1
user.maps.k2=v2
user.lists=lisi,hello,zhaoliu
user.dog.name=kitty
user.dog.age=1

类中的信息不用任何修改,但是对于配置文件中的中文,会有乱按问题,在不同的IDE中,要使用不同的方式进行调整

6.@ConfigurationProperties和@Value使用对比

@ConfigurationProperties支持批量绑定,@Value只能单个绑定
@ConfigurationProperties支持松散绑定(驼峰命名),@Value不支持松散绑定
@ConfigurationProperties不支持SpEL,@Value支持SpEL
@ConfigurationProperties只是JSR303数据校验,@Value不支持JSR303
@ConfigurationProperties 支持复杂类型,@Value不支持复杂类型

7.@PropertySource和@ImportResource

@PropertySource 用于加载指定的properties配置文件

@ImportResource 导入spring的配置文件,使配置文件中的内容生效

@ImportResource("classpath:beans.xml")
7.@Configuration和@Bean

spring-boot推荐使用全注解的方式向容器中添加组件 @Bean,就是自己声明一个配置类,用来代替原来的配置文件。如何能让spring-boot能够自动的识别我们自定义的类为一个配置类呢?就需要用到@Configuration 这个注解了

当然仅仅使用@Configuration 这一个注解是不够的,还需要与@Bean配合使用

@Configuration
public class AppConfig {
    @Bean
    public User initUser() {
        return new User();
    }
}

如代码所示,spring-boot会将@Configuration 修饰的类中,调用@Bean 修饰的方法,将方法的返回值添加到容器中,而容器中这个对象的默认id就是方法名

7.在配置文件中使用占位符
user.last-name=hello${random.uuid}
user.dog.name=${user.last-name}-kitty

如代码所示,user.last-name 会生成一个随机的uuid字符串,而user.dog.name中,也会将上面的user.last-name 添加进去

  • 对不存在的配置添加默认值
user.dog.name=${user.friend:lisi}-kitty

在配置文件中,user.friend并不存在,所在获取的时候,spring-boot会自动将: 后面的值作为这个属性的默认值进行处理

如果没有设置默认值

user.dog.name=${user.friend}-kitty

则会将 ${user.friend}作为一个普通的字符串处理

  • 占位符中的随机数
${random.value}
${random.int}
${random.long}
${random.int(10)}
${random.int[1024,65536]}

猜你喜欢

转载自blog.csdn.net/oXinYangonly/article/details/79736378