【SpringBoot系列】二:SpringBoot配置详解
来源:互联网 发布:highcharts more.js 编辑:程序博客网 时间:2024/04/30 02:58
通过上一篇博客对Spring Boot的介绍,你也看见了Spring Boot并不真正是所谓的『零配置』,他的理念是“习惯优于配置”采用了一些默认的习惯性配置,让你无需手动进行配置,从而让你的项目快速运行起来。所以要想玩转Spring Boot,了解这些默认配置还是必不可少的。
创建Spring Boot项目时,会默认生成一个全局配置文件application.properties(可以修改后缀为.yml),在src/main/resources目录下或者类路径的/config下。我们可以通过修改该配置文件来对一些默认配置的配置值进行修改。
自定义属性
我们可以在application.yml文件中,配置一些常量或者其他参数配置。读取的时候通过Spring的@Value(“${属性名}”)注解即可。
在application.yml定义几个常量:
ip: 111.111.111.111port: 8080
在Controller读取该配置:
/** * Created by qianqian.niu on 2017/6/27. */@RestControllerpublic class HelloConfigController { @Value("${ip}") private String ip; @Value("${port}") private String port; @GetMapping("/getHost") public String getHost() { return "ip:" + ip + " port:" + port; }}
访问 http://localhost:8080/getHost 显示:;
ip:111.111.111.111 port:8080
实体类属性赋值
当属性参数变多的时候,我们习惯创建一个实体,用实体来统一接收赋值这些属性。
定义配置文件:
UserBody: name: erniuxxx password: 888 birthday: 1992.10.28 mobile: 133xxxx address: 北京市朝阳区
创建实体类:
/** * Created by qianqian.niu on 2017/6/27. */@ConfigurationProperties(prefix = "UserBody")public class UserBody { private String name; private String password; private String birthday; private String mobile; private String address; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getBirthday() { return birthday; } public void setBirthday(String birthday) { this.birthday = birthday; } public String getMobile() { return mobile; } public void setMobile(String mobile) { this.mobile = mobile; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return "UserBody{" + "name='" + name + '\'' + ", password='" + password + '\'' + ", birthday='" + birthday + '\'' + ", mobile='" + mobile + '\'' + ", address='" + address + '\'' + '}'; }}
需要在实体类上增加注解@ConfigurationProperties,并指定prrfix前缀。
controller调用:
/** * Created by qianqian.niu on 2017/6/27. */@RestController@EnableConfigurationProperties({UserBody.class})public class HelloController { @Autowired UserBody userBody; @GetMapping("/getUser") public String getUser(){ return userBody.toString(); }}
EnableConfigurationProperties注解需要加在调用类上,或者加在启动类SpringbootSimpleApplication上也可以。
调用 http://localhost:8080/getUser
UserBody{name='erniuxxx', password='888', birthday='1992.10.28', mobile='133xxxx', address='北京市朝阳区'}
另外发现一个小问题,如果配置中定义使用”user”
user: name: erniuxxx password: 888
那么获取的name将会是电脑的名称,好神奇。
UserBody{name='erniu', password='888', birthday='1992.10.28', mobile='133xxxx', address='北京市朝阳区'}
还有,在application.yml中的各个参数之间也可以直接互相引用:
user: name: erniuxxx password: 888 address: 北京市朝阳区 remark: ${address}-${name}
自定义配置文件
application.yml是系统默认的配置文件,当然我们也可以创建自定义配置文件,在路径src/main/resources下面创建文件test.properties
PS:spring boot 1.5版本后@PropertySource注解就不能加载自定义的yml配置文件了
定义test.properties:
TestUser.name = "songxiao222"TestUser.password = "123"TestUser.birthday = "1992.10.28"
将配置赋值到javabean:
/** * Created by qianqian.niu on 2017/6/27. */@Configuration//@PropertySource("classpath:test1.yml")@PropertySource("classpath:test.properties")@ConfigurationProperties(prefix = "TestUser")public class TestUser { private String name; private String password; private String birthday; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getBirthday() { return birthday; } public void setBirthday(String birthday) { this.birthday = birthday; } @Override public String toString() { return "UserBody{" + "name='" + name + '\'' + ", password='" + password + '\'' + ", birthday='" + birthday + '\'' + '}'; }}
1. @Configuration 注解包含@Component注解
2. spring boot如果是1.5以前的版本,那么可以通过locations指定properties文件的位置:
@ConfigurationProperties(prefix = "TestUser",locations="classpath:test.properties")
3. 1.5版本后需要通过@PropertySource(“classpath:test.properties”)指定配置文件
Controller 读取配置:
/** * Created by qianqian.niu on 2017/6/27. */@RestController@EnableConfigurationProperties({TestUser.class,UserBody.class})public class HelloConfigController { @Autowired TestUser testUser; @Autowired UserBody userBody; @GetMapping("/getTestUser") public String getTestUser(){ return testUser.toString(); } @GetMapping("/getUser") public String getUser(){ return userBody.toString(); }}
多个环境配置文件
关于多环境配置文件,之前写过一篇博客:http://blog.csdn.net/u010028869/article/details/50818710
通过maven的 –P命令来指定打包时的使用那个配置文件。
相比而言Spring Boot 提供的这种方式真是太简单了
在Spring Boot中多环境配置文件名需要满足application-{profile}.properties的格式,其中{profile}对应你的环境标识,比如:
application-test.properties:测试环境server: port: 8083application-dev.properties:开发环境server: port: 8081application-prod.properties:生产环境server: port: 8082
想要使用对应的环境,只需要在application.yml中使用spring.profiles.active属性来设置,值就是{profile},如dev、prod。
spring: profiles: active: dev
启动工程,发现程序的端口不再是8080,而是8081
当然用jar命令启动jar包的时候也可以指定使用哪个配置文件:
java -jar xxx.jar --spring.profiles.active=dev
小结
Spring Boot的配置还是相当简便的,希望在此整理的有关配置的信息能够帮到大家。这里也埋了个小坑,就是如何加载自定义的yml文件,下次讲到Spring Boot自定义监听器的时候在解决这个问题~
源码下载:稍后补上
- 【SpringBoot系列】二:SpringBoot配置详解
- 【SpringBoot系列】SpringBoot注解详解
- SpringBoot配置属性系列
- springboot系列文章(二)-搭建springboot工程
- SpringBoot(二):配置文件详解
- SpringBoot 配置分析(二)
- springboot 配置详解
- Springboot 配置详解
- springboot-mybatis 配置详解
- SpringBoot DataSource配置详解
- Springboot 外置配置详解
- springboot学习二(springboot相关配置)
- Spring Boot系列<二>:SpringBoot完美配置Mybatis
- SpringBoot系列—基础配置
- SpringBoot系列—SSL配置
- springBoot基础系列--properties配置
- springBoot基础系列--properties配置
- springBoot基础系列--properties配置
- adb常用命令总结
- muduo源码学习(3)-原子操作
- 基于PhoneGap的iOS平台入门教程
- [我的计划]
- [Go]程序结构——赋值
- 【SpringBoot系列】二:SpringBoot配置详解
- 在BAT工作和创业公司工作有什么不同的体验?
- 我们在谈论web/web应用/web开发时,到底再说什么?
- MySQL高速缓存---query_cache_size
- 数据库知识(面)
- 读取图片并打印图片
- 二级指针三种内存模型
- 初来乍到
- 笔记:Java反射机制基础