SpringBoot学习(二)————主启动类、 yaml 、多环境配置及配置文件的位置

本文介绍了SpringBoot的主启动类,详细解析了SpringBootApplicantion.run()的主要执行步骤,包括项目类型判断、初始化器加载、监听器设置和主类推断。此外,还探讨了YAML配置的特性,如直接赋值给实体类,松散绑定,JSR303数据校验。接着,文章讲解了配置文件的应用,如application.properties和application.yaml的格式,以及配置文件的自动和手动绑定。最后,讨论了多环境配置的实现方式,包括配置文件的位置和加载顺序,并对比了不同环境配置的指定方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主启动类

//标注是一个springboot应用
@SpringBootApplication
public class Springboot01HelloworldApplication {

    public static void main(String[] args) {
        //将springboot应用启动
        SpringApplication.run(Springboot01HelloworldApplication.class, args);
    }
}

执行run(),一是springbootApplocation的实例化,二是执行参数

SpringBootApplicantion.run()主要执行的四件事

  1. 推断应用的类型是普通的项目还是web项目
  2. 查找并加载所有可用初始化器,设置initializer属性中
  3. 找处所有的应用程序监听,设置到listeners属性中
  4. 推断并设置main()的定义类,找到运行的主类

yaml

可以直接给实体类赋值

配置文件

  • application.properties key = value

  • application.yaml key: value

#对空格要求十分高并且可以注入到我们的配置类中

#普通的key-value
name: wjq

#对象
student1:
  name: wjq
  age: 21

#行内写法
student2: {name: wjq, age: 3}

#数组
pets1:
  - cat
  - dog
  - pig

pets2: [cat,dog,pig]

配置文件和属性的绑定

  1. application.yaml实现一个自动绑定

    person:
      name: www${random.uuid}
      age: ${random.int}
      happy: true
      birth: 1999/11/25
      map:
        sentence1: nihao
        sentence2: China
      lists: [code,code,code]
      #专门为下述产生的
      hello: haha
      dog:
    #    如果person.age存在,就是此值,如果不存在就是0
        name: ${person.hello:hello}_haha
        age: 1
    
    @Component
    //将配置文件中的每一个属性的值,映射到这个组件中,进行一个绑定,自动映射
    @ConfigurationProperties(prefix = "person")
    public class Person {
        private String name;
        private Integer age;
        private Boolean happy;
        private Date birth;
        private Map<String, Object> map;
        private List<Object> lists;
        private Dog dog;
    	...
    }
    
  2. specific.propertieds实现手动的绑定

    name=www
    
    @Component
    //指定自定义的配置文件
    @PropertySource(value = "classpath:specific.properties")
    public class Person {
        //通过el进行一个映射
        @Value("${name}")
        private String name;
        private Integer age;
        private Boolean happy;
        private Date birth;
        private Map<String, Object> map;
        private List<Object> lists;
        private Dog dog;
    	...
    }
    
    @ConfigurationProperties@Value
    功能批量注入配置文件中的属性一个个绑定
    松散绑定(松散语法)支持不支持
    SpEL不支持支持
    JSR303数据校验支持不支持
    复杂类型封装支持不支持

松散绑定

dog:
  dog-name: 阿黄
  age: 2
@Component
@ConfigurationProperties(prefix = "dog")
public class Dog {
    private String dogName;
    private Integer age;
}

JSR303数据校验

在字段增加一层过滤器验证,可以保证数据的合法性

新版本没有兼容validation,手动导入

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

导入这个

<dependency>
    <groupId>org.hibernate.validator</groupId>
    <artifactId>hibernate-validator</artifactId>
</dependency>
@Validated//数据校验
public class Person {
    @NotNull(message="名字不能为空")
    private String name;
    private Integer age;
    private Boolean happy;
    @Email(message = "邮箱格式错误")
    private String email;
    private Date birth;
    private Map<String, Object> map;
    private List<Object> lists;
    private Dog dog;
    ...
}

复杂类型封装

yaml中可以封装对象,使用@Value就不支持了

多环境配置及配置文件的位置

配置文件可存放的位置以及加载的顺序,必须新建一个项目

项目/config/.yaml

项目/.yaml

classpath/config/.yaml

classpath/.yaml

指定环境

方法一:默认是在application.yaml中,可以指定环境

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xCil8m0e-1627193222705)(SpringBoot.as在这里插入图片描述sets/image-20210725092820759.png)]

application.yaml

#指定环境,可以自主选择要激活的配置文件
spring:
  profiles:
    active: dev

缺点:要写三个文件

方法二:可以写在一个文件中

application.yaml

server:
  port: 8081
#指定环境,可以自主选择要激活的配置文件
spring:
  profiles:
    active: test
    
---   #分隔符
server:
  port: 8082
spring:
  profiles:
    default: dev

---   #分隔符
server:
  port: 8083
spring:
  profiles:
    default: test

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值