Spring Boot 2.x 基础教程:配置文件详解

Springboot有一个全局配置文件,这个配置文件默认是properties文件,就是application.properties文件,其实还有一种文件,就是yml文件,只不过这种文件是需要自己创建的。这个配置文件是用来修改Springboot的默认配置的。

比如说当我们集成了start-web之后,Springboot默认的web服务器是Tomcat,我们可以对Tomcat的默认配置做一些处理。配置文件能做的事情很多,语法也很简单。

一、基础配置

当快速入门示例中,我们创建 Spring Boot 的工程项目时,系统默认会为我们在 src/main/java/resources 目录下创建一个application.properties。个人习惯,我会将 application.properties 改为 application.yml 文件,两种文件格式都支持。

Spring Boot 的默认配置文件位置为: src/main/java/resources/application.properties

在application.yml自定义一组属性:

my:
 name: sanke
 age: 11

与其等价的 properties 配置如下

my.name=sanke
my.age=11

我们需要读取配置文件的值只需要加 @Value(“${属性名}”)

@RestController
public class MyController {

    @Value("${my.name}")
    private String name;
    @Value("${my.age}")
    private int age;

    @RequestMapping(value = "/my")
    public String my(){
        return name+":"+age;
    }
}

启动工程,访问:localhost:8080/my, 浏览器显示:

sanke:11

二、配置文件的属性对应实体类

当我们有很多配置属性的时候,这样一个个接受非常繁琐 ,这个时我们就会把这些属性作为字段来创建一个 JavaBean,并将属性值赋予给他们,比如:

my:
 name: sanke
 age: 12
 number:  ${random.int}
 uuid : ${random.uuid}
 max: ${random.int(10)}
 value: ${random.value}
 greeting: hi,i'm  ${my.name}

其中配置文件中用到了 ${random} ,它可以用来生成各种不同类型的随机值。

怎么将这些属性赋于给一个 JavaBean 呢,首先创建一个 JavaBean:

@ConfigurationProperties(prefix = "my")
@Component
public class ConfigBean {

    private String name;
    private int age;
    private int number;
    private String uuid;
    private int max;
    private String value;
    private String greeting;
    
    省略了getter setter....
}

需要加个注解 @ConfigurationProperties,并加上它的 prrfix。另外 @Component 可加可不加。

另外需要在 应用类或者 application启动类,加 EnableConfigurationProperties 注解。

@EnableConfigurationProperties注解的作用是:使使用 @ConfigurationProperties 注解的类生效。

@RestController
@EnableConfigurationProperties({MyConfig.class})
public class MyConfigController {
    @Autowired
    private MyConfig myConfig;

    @GetMapping("/myConfig")
    public String myConfig(){
        return myConfig.getGreeting()+" >>>"+myConfig.getName()+" >>>"+ myConfig.getUuid()+" >>>"+myConfig.getMax();
    }
}

启动工程,访问 localhost:8080/myConfig, 我们会发现配置文件信息读到了。

三、自定义配置文件

上面介绍的是我们都把配置文件写到 application.yml 中。有时我们不想把配置都写到 application 配置文件中,这时我们可以自定义配置文件,比如 my.properties:

com.sanke.name=sanke
com.sanke.age=12

怎么将这个配置文件信息赋予给一个 JavaBean 呢?

@Configuration
@PropertySource(value = "classpath:my.properties")
@ConfigurationProperties(prefix = "com.sanke")
public class User {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

在最新版本的 springboot,需要加这三个注解。@Configuration @PropertySource @ConfigurationProperties

@RestController
@EnableConfigurationProperties({MyConfig.class, User.class})
public class UserController {
    @Autowired
    private MyConfig myConfig;
    @GetMapping(value = "/user/myConfig")
    public String myConfig(){
        return myConfig.getGreeting()+" >>>"+myConfig.getName()+" >>>"+ myConfig.getUuid()+" >>>"+myConfig.getMax();
    }

    @Autowired
    private User user;
    @GetMapping(value = "/user")
    public String user(){
        return user.getName()+ ":" +user.getAge();
    }
}

启动工程,打开 localhost:8080/user ;浏览器会显示:

sanke:12

四、多个环境配置文件

在实际的开发过程中,我们需要在不同环境下使用不同的配置; 格式为application-{profile}.properties,其中 {profile} 对应你的环境标识,比如:

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

怎么使用?只需要我们在application.yml中加:

spring:
 profiles:
   active: test

其中application-dev.yml:

 server:
  port: 8090

启动工程,发现程序的端口不再是 8080, 而是 8090,表示测试环境已经成功启用了。

你可能感兴趣的:(javaspringboot)