主启动类
//标注是一个springboot应用
@SpringBootApplication
public class Springboot01HelloworldApplication {
public static void main(String[] args) {
//将springboot应用启动
SpringApplication.run(Springboot01HelloworldApplication.class, args);
}
}
执行run(),一是springbootApplocation的实例化,二是执行参数
SpringBootApplicantion.run()主要执行的四件事
- 推断应用的类型是普通的项目还是web项目
- 查找并加载所有可用初始化器,设置initializer属性中
- 找处所有的应用程序监听,设置到listeners属性中
- 推断并设置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]
配置文件和属性的绑定
-
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; ... }
-
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中,可以指定环境
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