1.Spring Boot优先于配置的惯例,旨在让Web项目尽快启动和运行
2.在一般情况下,不需要做太多的配置就能够让spring boot正常运行
3.要想把Spring Boot玩的溜,就要懂得如何开启各个功能模块的默认配置
4.这就需要了解Spring Boot的配置文件application.properties/yml
(1)Spring Boot使用了一个全局的配置文件application.properties
<1>当创建springboot项目的时候,系统默认会在src/main/java/resources目录下创建一个application.properties
<2>有些人由于个人习惯,会将application.properties改为application.yml文件,两种文件格式都支持
1.建议使用application.yml
2.无论从可读性、编码一致性考虑,均是最佳选择
3.可以从根源上解决因application.properties配置中文造成的乱码问题
<3>Sping Boot的全局配置文件的作用是对一些默认配置的配置值进行修改
<4>如果工程没有这个application.properties/yml,那就在src/main/java/resources目录下新建一个
(2)自定义属性
<1>application.properties提供自定义属性的支持,这样就可以把一些常量配置在这里
1.例如在application.properties中配置如下信息:user.name="张三" user.age=18
例如在application.yml中配置如下信息:user:
name:张三 (注意冒号后面有空格)
age:18(注意冒号后面有空格)
2.在要使用的地方通过注解@Value("${属性名}"),就可以绑定到想要的属性上面
3.代码示例如下:
@RestController
public class UserController {
@Value("${user.name}")
private String name;
@Value("${user.age}")
private int age;
@RequestMapping("/user")
public String user(){return name+":"+age;}}
<2>启动工程,访问:localhost:8080/miya,浏览器显示:张三:18
(3)将配置文件的属性赋给实体类
<1>有时候属性太多了,一个个绑定到属性字段上太累,官方提倡绑定一个对象的bean,并将属性值赋予给对象bean
<2>例如配置文件application.yml中配置如下信息:
myuser:
name: 张三(注意冒号后面有空格)
age: 12(注意冒号后面有空格)
uuid : ${random.uuid}(注意冒号后面有空格)
<3>其中配置文件中用到了${random} ,它可以用来生成各种不同类型的随机值
<4>将这些属性赋于给一个javabean,首先创建一个javabean:ConfigBean.java
@ConfigurationProperties(prefix = "myuser")
public class MyUserBean {
private String name;
private int age;
private String uuid;
省略了getter setter....}
1.需要加个注解@ConfigurationProperties,并加上它的前缀prefix
2.前缀的值为配置文件中的属性
<5>另外需要在应用类或者SpringBoot入口类,加EnableConfigurationProperties注解
1.一般直接在应用类添加该注解
2.如果配置属性对应的JavaBean过多,在SpringBoot入口添加该注解,后期维护较大,不好查找
3.示例代码如下:
@RestController
@EnableConfigurationProperties({MyUserBean.class})
public class MyUserController {
@Autowired
MyUserBean myUserBean;
@RequestMapping(value = "/myuser")
public String miya(){
return myUserBean.getName()+" >"+ myUserBean.getAge()+">"+myUserBean.getUuid();}
<6>不管是在应用类或者SpringBoot入口类,最后都要在应用类Controller中引入创建的JavaBean
1.通过spring注入的方式引入
2.@Resource
MyUserBean myUserBean;
<7>启动工程,访问localhost:8080/myuser,配置文件信息就读到了
(4)参数间引用
<1>在application.properties/yml中的各个参数之间也可以直接引用来使用
<2>就像下面的设置:
myuser:
name: 张三(注意冒号后面有空格)
age: 12(注意冒号后面有空格)
uuid : ${random.uuid}(注意冒号后面有空格)
greeting: hi,i'm ${my.name}
<3>这里greeting参数属性引用了name属性
(5)自定义配置文件
<1>有时候不希望把所有配置都放在application.properties/yml里面,这时候可以另外定义一个
<2>这里取名为test.properties/yml,路径跟也放在src/main/resources下面:配置信息如下
myconfig.name=forezp
myconfig.age=12
<3>将这个配置文件信息赋予给一个javabean,新建一个bean类,如下:
@Configuration
@PropertySource(value = "classpath:test.properties")
@ConfigurationProperties(prefix = "myconfig")
public class MyConfigBean {
private String name;
private int age;
{省略get/set方法}
1.如果使用的是1.5以前的版本,那么可以通过locations指定properties文件的位置,这样:
@ConfigurationProperties(prefix = "myconfig",locations="classpath:test.properties")
2.1.5版本后就没有这个属性了,在最新版本的springboot,需要加上面那三个注解才可以读取
<4>自定义配置文件的使用处理JavaBean不同多了两个注解,在应用类或者SpringBoot入口类使用完全一样,如下:
@RestController
@EnableConfigurationProperties({MyConfigBean.class,MyUserBean.class})
public class MyTestController {
@Autowired
MyConfigBean configBean;
@Autowired
MyUserBean user;
@RequestMapping(value = "/myConfigBean")
public String miya(){
return configBean.getName()+" >"+ configBean.getAge();}
@RequestMapping(value = "/user")
public String user(){
return user.getName()+user.getAge();}}
<5>启动工程,打开localhost:8080/user;浏览器会显示结果
(6)随机值配置
<1>配置文件中${random} 可以用来生成各种不同类型的随机值
<2>简化了代码生成的麻烦,例如 生成 int 值、long 值或者 string 字符串
user.secret=${random.value}
user.number=${random.int}
user.bignumber=${random.long}
user.uuid=${random.uuid}
user.number.less.than.ten=${random.int(10)}
user.number.in.range=${random.int[1024,65536]}
(7)外部配置-命令行参数配置
<1>不但可以通过配置文件设置属性,也可以通过命令行设置属性
<2>Spring Boot是基于jar包运行的,打成jar包的程序可以直接通过下面命令运行:java -jar xx.jar
<3>可以以下命令修改tomcat端口号:java -jar xx.jar --server.port=9090
<4>命令行中连续的两个减号--就是对application.properties中的属性值进行赋值的标识
<5>java -jar xx.jar --server.port=9090等价于在application.properties中添加属性server.port=9090
<6>高优先级属性源里设置的属性都会覆盖低优先级的相同属性
<7>命令行属性就覆盖了application.properties的属性
(8)配置文件的优先级
<1>src/main/resources/config下application.properties覆盖src/main/resources下application.properties中相同的属性
<2>如果application.properties和application.yml同时存在相同文件夹下且配置属性相同,那么:
1.application.properties里的属性就会覆盖application.yml
2.application.properties的优先级高于application.yml
(9)多个环境配置文件
<1>在Spring Boot中多环境配置文件名需要满足application-{profile}.properties的格式
<2>{profile}对应环境标识,比如:
1.application-dev.properties:开发环境
2.application-prod.properties:生产环境
3.application-test.properties:测试环境
<3>各个环境的配置会略有不同,可以根据这个创建多份配置文件,由主配置文件来控制读取各个子环境配置
<4>分别创建三个应用环境的配置和一个主配置
<5>主配置文件:application.properties/yml
1.想使用对应的环境,需要使用spring.profiles.active属性来设置激活,方式3种如下:
-命令行:--spring.profiles.active=dev
-配置文件:spring.profiles.active=dev
-jvm参数:-Dspring.profiles.active=dev
2.在主配置文件中:只需要在application.properties/yml中使用spring.profiles.active属性来设置激活
3.值对应上面提到的{profile},这里就是指dev、prod、test这3个
例如:具体使用那个子配置文件的标识名称:开发环境
spring.profiles.active=dev
<6>各个子环境配置
1.application-dev.properties:开发环境
1.1.配置内容如下:
# 开发环境端口
server.port=8081
2.application-test.properties:测试环境
2.1.配置内容如下:
# 开发环境端口
server.port=8082
<7>更改主配置中的spring.profiles.active=dev这个参数就可以切换不同子配置文件了
(10)多个环境配置文件应用实例如下:这里以.yml文件格式为例
<1>主配置文件:application.yml
spring:
profiles:
active: dev
<2>子环境配置文件如下:application-dev.yml
myuser:
name: 李四
age: 18
uuid : ${random.uuid}
server:
port: 8081
<3>浏览器访问:localhost:8081/myuser
1.主配置文件中引用子环境配置文件
1.端口号不再是默认的8080
2.而是子环境配置文件中的端口号8081