前言


SpringBoot使用“习惯优于配置”的理念,让你的项目快速运行起来,因此我们就需要了解SpringBoot的配置文件application.properties。   一、配置文件存放的位置

当我们使用工具创建一个SpringBoot项目的时候,默认会在resources目录下面有一个application.properties文件,我们可以在application.properties文件中进行项目的配置,但是这个文件并非项目的唯一配置文件,在SpringBoot项目中,一共有4个地方可以存放application.properties配置文件,它们的位置分别是: 1.  当前项目根目录下的config目录 2.  当前项目的根目录 3.  resources目录下的config目录 4.  resources目录 按照上面的顺序,四个配置文件的优先级依次降低。如下图:

spring boot 不install 找不到或无法加载主类 spring boot 找不到配置文件_properties中文乱码


注意:

    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配置中,各个配置参数也可以相互之间进行引用,如下:

spring boot 不install 找不到或无法加载主类 spring boot 找不到配置文件_properties配置文件_02


  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 boot 不install 找不到或无法加载主类 spring boot 找不到配置文件_properties中文乱码_03

六、多环境配置


在我们实际开发项目过程中,我们本地使用的是开发环境,如果需要发布测试,这个时候就需要使用测试环境,如果发布到生产则需要使用生产环境,传统的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有所帮助。