resources文件夹中目录结构
- static:保存所有的静态资源,如:js css images
- templates:保存所有的模板页面(Spring Boot默认jar包使用嵌入式的Tomcat,默认不支持JSP页面),可以使用模板引擎(freemarker、thymeleaf)
- application.yml/application.properties:Spring Boot应用的配置文件,可以修改一些默认设置
YAML语法
基本语法
- k:(空格)v:表示一对键值对(空格必须有),以空格的缩进来控制层级关系,只要是左对齐的一列数据,都是同一个层级的,属性和值大小写敏感
值的写法
- 字符串默认不用加上单引号或者双引号
- "":双引号;不会转义字符串里面的特殊字符,特殊字符会作为本身想表示的意思name: "zhangsan \n lisi",输出;zhangsan 换行 lisi
- '':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据name: ‘zhangsan \n lisi’,输出;zhangsan \n lisi
@Value和@ConfigurationProperties获取配置文件中的值比较
@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
//@Email
//@Value("${person.last‐name}")
private String lastName;
//@Value("#{11*2}")
private Integer age;
//@Value("true")
private Boolean boss;
- 配置文件yml和properties都能获取到值
- 如果我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value
- 如果我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties
@PropertySource&@ImportResource&@Bean
@PropertySource:加载指定的配置文件
@PropertySource(value = {"classpath:person.properties"})
@Component
public class Person {
private String lastName;
private Integer age;
}
@ImportResource:导入Spring的配置文件,让配置文件里面的内容生效
//导入Spring的配置文件让其生效
@ImportResource(locations = {"classpath:beans.xml"})
配置类@Configuration(相当于Spring配置文件)
使用@Bean给容器中添加组件
/**
* @Configuration:指明当前类是一个配置类,替代Spring配置文件
*/
@Configuration
public class MyAppConfig {
//将方法的返回值添加到容器中;容器中这个组件默认的id就是方法名
@Bean
public HelloService helloService(){
System.out.println("配置类@Bean给容器中添加组件了...");
return new HelloService();
}
}
配置文件占位符
person.name=${random.uuid}
person.age=${random.int}
person.dog.name=${person.name}_dog
yml多文档块
server:
port: 8081
spring:
profiles:
active: prod
‐‐‐
server:
port: 8083
spring:
profiles: dev
‐‐‐
server:
port: 8084
spring:
profiles: prod #指定属于哪个环境
配置文件加载位置
springboot启动会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件
- –file:./config/
- –file:./
- –classpath:/config/
- –classpath:/
优先级由高到底,高优先级的配置会覆盖低优先级的配置
SpringBoot会从这四个位置全部加载主配置文件,互补配置
通过spring.config.location改变默认的配置文件位置
SLF4j使用
Hello World
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloWorld {
public static void main(String[] args) {
Logger logger = LoggerFactory.getLogger(HelloWorld.class);