src/main/resources目录是SpringBoot的配置目录,SpringBoot使用一个全局的配置文件,默认配置文件位置为: src/main/resources/application.properties。其配置文件名是固定的。application.properties 或者是application.yml,例如修改服务器端口

  1. server:
  2. port: 8081

@Value获取值和@ConfigurationProperties获取值比较

@ConfigurationProperties @Value
功能 批量注入配置文件中的属性 一个个指定
松散绑定(松散语法) 支持 不支持
SpEL 不支持 支持
JSR303数据校验 支持 不支持
复杂类型封装 支持 不支持

配置文件yml还是properties他们都能获取到值;
如果说,我们只是在某个业务逻辑中需要获取一下配置文件中的某项值,使用@Value;
如果说,我们专门编写了一个javaBean来和配置文件进行映射,我们就直接使用@ConfigurationProperties;
@PropertySource:加载指定的配置文件;

配置项 说明 举例
server.port 应用程序启动端口 server.port=8080,定义应用程序启动端口为 8080
server.servlet.context-path 应用程序上下文 server.servlet.context-path=/api,则访问地址为:http://ip:port/api
spring.servlet.multipart.maxFileSize 最大文件上传大小,-1为不限制 spring.servlet.multipart.maxFileSize=-1
spring.jpa.database 数据库类型 spring.jpa.database=MYSQL,指定数据库为mysql
spring.jpa.properties.hibernate.dialect hql方言 spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
spring.datasource.url 数据库连接字符串 spring.datasource.url=jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=UTF-8&useSSL=true
spring.datasource.username 数据库用户名 spring.datasource.username=root
spring.datasource.password 数据库密码 spring.datasource.password=root
spring.datasource.driverClassName 数据库驱动 spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.jpa.showSql 控制台是否打印 SQL 语句 spring.jpa.showSql=true

例如application.yml 配置文件内容:

  1. server:
  2. port: 8080
  3. servlet:
  4. context-path: /api
  5. tomcat:
  6. basedir: /data/tmp
  7. max-threads: 1000
  8. min-spare-threads: 50
  9. connection-timeout: 5000
  10. spring:
  11. profiles:
  12. active: dev
  13. servlet:
  14. multipart:
  15. maxFileSize: -1
  16. datasource:
  17. url: jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=UTF-8&useSSL=true
  18. username: root
  19. password: root
  20. driverClassName: com.mysql.jdbc.Driver
  21. jpa:
  22. database: MYSQL
  23. showSql: true
  24. hibernate:
  25. namingStrategy: org.hibernate.cfg.ImprovedNamingStrategy
  26. properties:
  27. hibernate:
  28. dialect: org.hibernate.dialect.MySQL5Dialect
  29. mybatis:
  30. configuration:
  31. #配置项:开启下划线到驼峰的自动转换. 作用:将数据库字段根据驼峰规则自动注入到对象属性
  32. map-underscore-to-camel-case: true

多环境配置

创建 application.yml 文件,在里面添加如下内容:

  1. spring:
  2. profiles:
  3. active: dev

含义是指定当前项目的默认环境为 dev,即项目启动时如果不指定任何环境,Spring Boot 会自动从 dev 环境文件中读取配置信息。我们可以将不同环境都共同的配置信息写到这个文件中。
然后创建多环境配置文件,文件名的格式为:application-{profile}.yml,其中,{profile} 替换为环境名字,比如:

  • application-dev.properties:开发环境
  • application-test.properties:测试环境
  • application-prod.properties:生产环境

如 application-dev.yml,我们可以在其中添加当前环境的配置信息,如添加数据源:

  1. spring:
  2. datasource:
  3. url: jdbc:mysql://localhost:3306/database?useUnicode=true&characterEncoding=UTF-8&useSSL=true
  4. username: root
  5. password: root
  6. driverClassName: com.mysql.jdbc.Driver

然后我们在application.properties中设置spring.profiles.active=dev,就是说默认以dev环境设置
在每次编译打包我们无需修改任何东西,编译为 jar 文件后,运行命令:

  1. java -jar api.jar --spring.profiles.active=dev

其中 --spring.profiles.active 就是我们要指定的环境。

读取配置

1.读取application文件

在application.yml或者properties文件中添加:

  1. info:
  2. name: xiaoming
  3. age: 13
  4. sex: 1

读取方式如下:

  1. import org.springframework.beans.factory.annotation.Value;
  2. import org.springframework.stereotype.Component;
  3. /*
  4. * 通过@value注解的方式读取
  5. */
  6. @Component
  7. public class TechUser {
  8. @Value("${info.name}")
  9. private String name;
  10. @Value("${info.age}")
  11. private int age;
  12. @Value("${info.sex}")
  13. private int sex;
  14. public String getName() {
  15. return name;
  16. }
  17. public void setName(String name) {
  18. this.name = name;
  19. }
  20. public int getAge() {
  21. return age;
  22. }
  23. public void setAge(int age) {
  24. this.age = age;
  25. }
  26. public int getSex() {
  27. return sex;
  28. }
  29. public void setSex(int sex) {
  30. this.sex = sex;
  31. }
  32. }
  33. @ConfigurationProperties注解读取方式
  34. import org.springframework.boot.context.properties.ConfigurationProperties;
  35. import org.springframework.stereotype.Component;
  36. @Component
  37. @ConfigurationProperties(prefix = "info")
  38. public class TechUser {
  39. private String name;
  40. private int age;
  41. private int sex;
  42. public String getName() {
  43. return name;
  44. }
  45. public void setName(String name) {
  46. this.name = name;
  47. }
  48. public int getAge() {
  49. return age;
  50. }
  51. public void setAge(int age) {
  52. this.age = age;
  53. }
  54. public int getSex() {
  55. return sex;
  56. }
  57. public void setSex(int sex) {
  58. this.sex = sex;
  59. }
  60. }

2.读取指定文件

资源目录下建立config/db-config.properties:

  1. db.username=root
  2. db.password=123456

2.1@PropertySource+@Value注解读取方式
  1. @Component
  2. @PropertySource(value = { "config/db-config.properties" })
  3. public class DBConfig1 {
  4. @Value("${db.username}")
  5. private String username;
  6. @Value("${db.password}")
  7. private String password;
  8. public String getUsername() {
  9. return username;
  10. }
  11. public void setUsername(String username) {
  12. this.username = username;
  13. }
  14. public String getPassword() {
  15. return password;
  16. }
  17. public void setPassword(String password) {
  18. this.password = password;
  19. }
  20. }

注意:@PropertySource不支持yml文件读取。

2.2@PropertySource+@ConfigurationProperties注解读取方式
  1. @Component
  2. @ConfigurationProperties(prefix = "db")
  3. @PropertySource(value = { "config/db-config.properties" })
  4. public class DBConfig2 {
  5. private String username;
  6. private String password;
  7. public String getUsername() {
  8. return username;
  9. }
  10. public void setUsername(String username) {
  11. this.username = username;
  12. }
  13. public String getPassword() {
  14. return password;
  15. }
  16. public void setPassword(String password) {
  17. this.password = password;
  18. }
  19. }

3.Environment读取方式

以上所有加载出来的配置都可以通过Environment注入获取到。

  1. @Autowired
  2. private Environment env;

在Spring Boot 2.0中对配置属性加载的时候会除了像1.x版本时候那样移除特殊字符外,还会将配置均以全小写的方式进行匹配和加载。所以,下面的4种配置方式都是等价的:

  • properties格式:

    1. spring.jpa.databaseplatform=mysql
    2. spring.jpa.database-platform=mysql
    3. spring.jpa.databasePlatform=mysql
    4. spring.JPA.database_platform=mysql
  • yaml格式:

    1. spring:
    2. jpa:
    3. databaseplatform: mysql
    4. database-platform: mysql
    5. databasePlatform: mysql
    6. database_platform: mysql

Tips:推荐使用全小写配合-分隔符的方式来配置,比如:spring.jpa.database-platform=mysql