快速创建SpringBoot项目
(网上很多 不写了)
配置文件
SpringBoot使用一个全局的配置文件,这个额配置文件名是固定的:
application.properties
application.yml
配置文件的作用:修改SpringBoot自动配置的默认值:
由于在SpringBoot在底层都给我们自动配置好了,如果对某项配置不满意,可以自行修改
YAML
标记语言:
以前的配置文件,大多都使用的是xml文件;
而YAML以数据为中心,比json、xml更适合做配置文件
若application.properties写法更改tomcat端口号:
server.port=8081
而yaml:
server:
port:8081
如果是xml:
< server>
< port>8081< /port>
< / server>
YAML语法
基本语法
k:(空格)v
表示一对键值对 (空格必须要有的)
以空格的缩进来控制层级关系;只要左对齐的一列数据都是同一层级的
例:
server:
port: 8081
path: /hello
属性和值大小写敏感
值的写法
字面量:普通的值(数字,字符串,布尔值)
k: v
字面值直接来写,字符串不用加单双引号
“”:双引号:双引号不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思
例:
name:“zhangsan \n lisi” 输出: zhangsan 换行 lisi
‘’;单引号:会转义特殊字符,特殊字符最终只是一个普通字符串数据
例:
name:‘zhangsan \n lisi’ 输出:zhangsan \n lisi
对象、Map(属性和值)(键值对):
k: v
例:
friends:
lastName: zhangsan
age: 20
行内写法:(写一行)
friends: {lastName: zhangsan,age: 20}
数组(List\Set)
- 用短横线“-”值表示数组中的一个元素
pets:
- cat
- dog
- pig
行内写法:
pets: [cat,dog,pig]
配置文件注入值
- 配置文件:
person:
name: zhangsan
age: 18
boss: false
birth: 2000/1/1
maps: {k1: v1 , k2: v2}
lists:
- list
- family
dog:
dogName: Anan
dogAge: 2
javaBean:
/*
* 将配置文件中配置的每一个属性值,映射到这个组件中
* @ConfigurationProperties 告诉springboot将奔雷中的所有属性和配置文件中相关的配置进行绑定
* prefix = ""配置文件中哪个下面的所有属性进行一一映射
*
* 只有这个组件是容器中的组件,才能用容器提供的@ConfigurationProperties功能
*/
@Component
@ConfigurationProperties(prefix="person")
public class Person {
private String name;
private Integer age;
private Boolean boss;
private Date birth;
private Map<String,Object> maps;
private List<Object> lists;
private Dog dog;
我们可以导入配置文件处理器
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
- @Value获取值和@ConfigurationProperties获取比较值
@Value | @ConfigurationProperties | |
---|---|---|
功能 | 一个一个指定 | 批量注入配置文件中的属性 |
松散绑定(松散语法) | 不支持 | 支持 |
SpEL | 支持 | 不支持 |
JSR303数据校验 | 不支持 | 支持 |
复杂类型封装 | 不支持 | 支持 |
如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值 就用@Value
如果我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用ConfigurationProperties
@ConfigurationProperties默认从全局配置中获取值
配置文件之数据校验
JSR303数据校验用法:
@Component
@ConfigurationProperties(prefix=“person”)
@Validated <==== 数据校验需要添加
校验属性之上标记内容,比如:
@Email <====校验邮箱
private String email;
@Component
@ConfigurationProperties(prefix="person")
@Validated
public class Person{
@Email
private String email;
}
@PropertySource(value={“classpath:person.properties”})
可以通过上述注解去加载非全局配置里的配置文件
@ImportResource
导入Spring的配置文件,让配置文件里面的内容生效
@ImportResource(locations={“classpath:beans.xml”})
SpringBoot推荐给容器中添加组件的方式:
@Configuration
@Bean
/**
* @Configuration:指明当前类是一个配置类;就是来代替之前的Spring配置文件的
*
* 在配置文件中用<bean></bean>标签添加组件
*/
@Configuration
public class MyAppConfig {
//将方法的返回值添加到容器中,容器中这个组件默认的ID就是方法名
@Bean
public HelloService helloService(){
System.out.println("");
return new HelloService();
}
}
配置文件占位符
随机数
${random.value}
${random.int}
${random.long}
${random.int(10)}
${random.int[1024,65536]}
占位符获取之前配置的值,如果没有可以使用:"冒号"指定默认值
person.name=张三${random.uuid}
person.age=${random.int}
person.boss=false
person.dog.name=${person.hello:hello}_dog//此处取不到person.hello的值就会默认取hello
person.dog.name=${person.name}_dog//若此处取不到则会报错