前言
SpringBoot使用“习惯优于配置”的理念,让你的项目快速运行起来,因此我们就需要了解SpringBoot的配置文件application.properties。 一、配置文件存放的位置
当我们使用工具创建一个SpringBoot项目的时候,默认会在resources目录下面有一个application.properties文件,我们可以在application.properties文件中进行项目的配置,但是这个文件并非项目的唯一配置文件,在SpringBoot项目中,一共有4个地方可以存放application.properties配置文件,它们的位置分别是:
1.
当前项目根目录下的config目录
2.
当前项目的根目录
3.
resources目录下的config目录
4.
resources目录
按照上面的顺序,四个配置文件的优先级依次降低。如下图:
注意:
1. 如果在同一个目录下,存在application.yml和application.properties两个配置文件,则默认先读取application.properties配置文件。 2. 如果同一个配置属性,存在多个配置文件里面,则按照优先级先后顺序读 3. 创建SpringBoot项目的时候,一般配置文件默认放在项目的resources目录下面。 二、属性注入
2.1、普通属性注入
Application.properties提供自定义属性的支持,但是一般来说,我们在application.properties文件中主要用来存放系统配置,因此这种自定义配置不建议放在该文件中,我们可以自定义一个properties配置文件来存放这些这定义的配置信息。
例如,我们在resources目录下自定义user.properties文件,配置如下:
user.id=1user.userName=小星星user.password=123456
获取这些配置的方法有两种,第一种,直接在需要使用的地方通过注解@Value(value=”${config.name}”)就可以绑定到你想要的属性上面,如下:
@RestController@RequestMapping("/")public class IndexController { @Value(value = "${user.userName}") private String userName; @Value(value = "${user.password}") private String password; @GetMapping("HelloWorld") public String HelloWorld() { return userName + " " + password; }}
有的时候属性太多了,因此官方提倡绑定到一个对象Bean上面,这里我们创建一个UserBean.java类,通过@PropertySource来引入配置:
@PropertySource(value = "classpath:user.properties", encoding = "utf-8")public class UserBean { @Value(value = "${user.id}") private int id; @Value(value = "${user.userName}") private String userName; @Value(value = "${user.password}") private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}
这样,在启动SpringBoot项目的时候,会自动加载user.properties配置文件,在需要使用属性的地方,通过注解把UserBean对象注入进来,就可以使用。
@RestController@RequestMapping("/")public class IndexController { @Autowired private UserBean userBean; @GetMapping("HelloWorld") public String HelloWorld() { return userBean.getUserName() + " " + userBean.getPassword(); }}
以上只是Spring中属性注入的一个简单用法,和SpringBoot没有什么关系。接下来我们讲第二种属性注入方法。
2.2、类型安全的属性注入
SpringBoot引入了类型安全的属性注入,如果使用普通的配置方式,当我们的配置属性很多的时候,工作量就会比较繁琐,而且容易出错,因此使用SpringBoot提供的类型安全属性注入的方式,可以有效的解决这个问题。
@Component@ConfigurationProperties(prefix = "user")@PropertySource(value = "classpath:user.properties", encoding = "utf-8")public class UserBean { private int id; private String userName; private String password; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}
在需要使用属性的地方,通过注解把UserBean对象注入进来,就可以使用。这里引入了@ConfigurationProperties(prefix = “user”)的注解,并且配置了属性的前缀,此时会自动将Spring容器中对应的数据注入到对象对应的属性中,这样就不用通过@Value注解一个个注入属性,减少工作了并且能避免出差。
@RestController@RequestMapping("/")public class IndexController { @Autowired private UserBean userBean; @GetMapping("HelloWorld") public String HelloWorld() { System.out.println(userBean.getUserName() + " " + userBean.getPassword()); return "Hello World"; }}
注意:
1. @PropertySource注解,如果不设置encoding = “utf-8”,当遇到中文时将出现中文乱码。
2. 对象中的前缀+属性一定要与配置文件中的属性一致,才能注入数据到属性中。
三、属性间的引用
在application.properties配置中,各个配置参数也可以相互之间进行引用,如下:
user.remark=My name is 小星星, my password is 123456 四、随机值配置
在配置文件中,可以使用${random}用来生成各种随机数,从而简化代码生成的麻烦,生成int,long,或者字符串等等。
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]}
五、属性为数组或集合
在对象中,如果某些属性可能定义为数组或者集合,只需要在属性配置中由逗号分隔开定义,然后在对象中使用数组或者集合即可,如下:
user.ids=1,2,3,4,5
六、多环境配置
在我们实际开发项目过程中,我们本地使用的是开发环境,如果需要发布测试,这个时候就需要使用测试环境,如果发布到生产则需要使用生产环境,传统的Spring项目是,在发布到不同环境的时候就修改配置文件中相应的环境信息,比较麻烦。
在SpringBoot项目中profile给我们提供了解决方案,在SpringBoot中多环境配置文件名需要满足application-{profile}.properties的格式,其中${profile}对应你的环境标识,比如:
application-dev.properties开发环境application-prod.properties生产环境
想要使用对应的环境,只需要在application.properties配置文件中使用spring.profiles.active属性来设置,值对应上面的${profile},这里指的是dev和prod两个值。当然你也可以用命令在启动项目的时候带上参数:
java -jar xxx.jar --spring.profiles.active=dev
七、总结
本节对SpringBoot的配置文件application.properties进行解析总结,希望对大家学习SpringBoot有所帮助。