springboot自定义属性及多环境化配置

springboot支持自定义属性配置及自定义文件配置。主要通过@PropertySource、@ConfigurationProperties两个注解来实现。

在application.properties文件中加入以下内容:

wk.activeName = dev

然后在bean中可以使用@ConfigurationProperties注解直接注入值:

@RestController
@ConfigurationProperties(prefix = "wk")
public class ApplicationActiveController {

    public String getActiveName() {
        return activeName;
    }

    public void setActiveName(String activeName) {
        this.activeName = activeName;
    }

    private String activeName;

    @GetMapping("/application/active")
    public String applicationActiveName(){
        System.out.println(activeName);
        return activeName;
    }
}

访问http://localhost:8080/application/active,可以得到我们在配置文件中设置的值。这里需要注意的是,需要从配置文件中读取的值需要有set方法,不然无法赋值。

我们再新建一个application-run.properties文件,里面加入以下内容:

wk.activeName = run

然后使用@PropertySource注解来加载配置文件:

@RestController
@PropertySource("classpath:config/application-run.properties")
@ConfigurationProperties(prefix = "wk")
public class ApplicationActiveController {

    public String getActiveName() {
        return activeName;
    }

    public void setActiveName(String activeName) {
        this.activeName = activeName;
    }

    private String activeName;

    @GetMapping("/application/active")
    public String applicationActiveName(){
        System.out.println(activeName);
        return activeName;
    }
}

访问http://localhost:8080/application/active,我们会发现结果还是dev,结果错误;去掉application.properties中的相应字段,再次访问,结果为run,正确。由此可以发现如果一个值在application.properties中存在,那么就会覆盖其他配置文件的属性。

在我们平常开发中,经常是开发是一套数据库,测试一套数据库,线上又是另外一套数据库,这个时候就需要修改相应的数据库配置,spring中有profile注解来实现,springboot则提供了一个叫spring.profiles.active的属性来实现,根据它的值来加载不同的配置文件,相应配置文件的值为application-{profile}.properties,这个application前缀不能变,profile的值为spring.profile.active的值。
例如在application.properties加入:

spring.profiles.active=run

那么在加载配置的时候,除了application.properties中的属性外,还会加载application-run.properties配置文件的值。注意:application.properties的中如果与application-run.properties存在相同值,则会取application.properties中的值。

如果只是这样,那么每次在不同环境中运行时,我们还要修改application.properties中的spring.profiles.active的值,依旧很麻烦。只时候我们可以通过外部命令来引导,及使用springboot启动时的命令行参数来做到。

例如我们springboot项目最后打包的jar叫test.jar,我们需要在启动时采用运行环境配置即application-run.properties的配置参数,则命令为:

java -jar test.jar --spring.profiles.active=run

在IDEA中调试项目时可以直接在运行配置中配置相应active.profile参数,如图为使用开发配置参数application-dev.properties。
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_36666651/article/details/80286584