SpringBoot学习笔记 2018-08-09
SpringBoot的配置文件种类
1.application.properties
例:
server.port=8081
person.age=19
person.lastName=xiaohua
person.names=zhang1, zhang2, zhang3
person.maps.k1=v1
person.maps.k2=v2
person.maps.k3=v3
person.son.name=xiaoxiaozhang
person.son.flag=false
这里中文会出现乱码的情况, 在idea里面设置file encoding的编码
配置文件中支持随机数
例:
${random.int}
${random.uuid}
${random.value}
${random.long}
${random.int(10)}
${random.int[1023, 2048]}
多配置文件的情况
1. 多profile
创建的额外的配置文件名称可以为 application-{profile}.properties/yml
- 激活指定的 profile文件
在application.properties配置文件中指定
spring.profiles.active=dev; // 激活dev配置文件
2. application.yml
例:
在resources下创建 application.yml文件
server:
prot: 8081
person:
lastName: zhangsan
age: 18
3. 配置文件的加载次序
-file:./config/ //项目的根目录下的config文件夹
-file:./ // 根目录
-classpath:/config/ // resource 下的config文件夹
-classpath:/ // resource目录
从上到下依次优先,高优先级的配置文件会覆盖掉低优先级的配置文件
SpringBoot中的注解
@CoufigurationProperties
再实体类上声明, 将配置文件中配置好的值, 绑定到响应的实体类中
@CoufigurationProperties(prefix = "person")
public class Person{
...
}
上面的perfix指定的就是配置文件中的属性的名称
@Component
声明类为实体类
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
...
}
@Value
为实体类设置初始化的值
@Value("#{1 + 2 + 3}") // 进行代数运算
private int age;
@Value("${person.lastName}") // 注入配置文件中的值
private String lastName;
@Value("123") // 直接注入
private List<String> names;
@Value 和 @CoufigurationProperties 之间的区别
@CoufigurationProperties 支持批量的注入
@Value 一个一个具体的变量的注入
@CoufigurationProperties 支持松散的语法绑定 即配置文件的bean的配置的名称可以由横杠连接…
@Value 不支持松散语法
@CoufigurationProperties 不支持SPEL 即properties配置文件中不能写入 #{}这样的表达式
@Value 支持 SPEL
@CoufigurationProperties 支持JSR303数据校验
@Value 不支持数据校验
@CoufigurationProperties 可以封装复杂类型
@Value 无法封装复杂类型
@Validate
JSR303数据校验
@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
private int age;
@NotNull(message = "lastName不能为null")
@NotBlank(message = "不能为空")
private String lastName;
@NotEmpty(message = "不能为空")
private List<String> names;
@NotEmpty(message = "不能为空")
private Map<Object, Object> maps;
注意这里的@Validated注解 一定要和 @ConfigurationProperties配合使用
@RestController
@RestController注解相当于@ResponseBody + @Controller合在一起的作用
如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,或者html,配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。
如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。
如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解
@PropertiesSource && @ImportSource
@PropertiesSource 用来加载指定的properties文件并注入到当前类下
例:
@PropertySource(value = {“classpath: apps.properties”})
@ImportSource 用来加载指定的配置文件
例:
@ImportSource(locations = {"classpath: abc.xml"})
@Configuration
例:
@Configuration
public class Configuration01 {
@Bean
public Son initSon(){
Son son = new Son();
son.setName("小航");
son.setFlag(false);
return son;
}
}