SpringBoot-从入门到放弃(四) 配置文件的更多玩法

    xiaoxiao2021-03-25  66

             上一节我们玩了SB的properties配置文件和yml配置文件,这篇我们继续玩,玩一玩一些实用好玩的

    1.获取配置文件里的值

            就继续上一节的配置文件,我们配置了端口和上下文根,在SpringBoot中,可以使用Value注解进行获取。这一次我们也在配置文件里面随便添加一个自定义的配置,用于演示获取。(Value注解也不是SpringBoot专属的,Spring本身就有在用)         YAML配置文件如下(hehe不是系统的配置项,所以有警告)         程序代码如下 package com.kazz; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } @Value("${server.context-path}") private String context_path; @Value("${server.port}") private int port; //整形也是没有问题的 @Value("${hehe.blog}") private String blog; @Value("${hehe.author}") private String author; @RequestMapping("/config") public String config() { StringBuilder sb = new StringBuilder("玩一玩配置文件的取值,端口:"); sb.append(port).append(",上下文根:").append(context_path); return sb.toString(); } @RequestMapping("/config2") public String config2() { StringBuilder sb = new StringBuilder("玩一玩配置文件的取值,博客类型:"); sb.append(blog).append(",作者:").append(author); return sb.toString(); } }         启动程序,分别访问http://127.0.0.1:12345/sb/config和http://127.0.0.1:12345/sb/config2,结果如下

    2.封装配置项

            实际项目开发过程中,一般不会使用这种@Value直接引用配置项,而是将其封装起来,已get方法的形式给外部调用,当然我们自己在封装配置项类时,对成员使用@Value也是可以的,不过SpringBoot给我们提供了一种更方便快捷的封装形式:@ConfigurationProperties,我们新建一个类演示一下 package com.kazz; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component @ConfigurationProperties(prefix = "hehe") // 指定配置项的前缀 public class Configs { private String blog; private String author; public String getBlog() { return blog; } public String getAuthor() { return author; } //不能省略set方法 public void setBlog(String blog) { this.blog = blog; } public void setAuthor(String author) { this.author = author; } }         使用@ConfigurationProperties注解时,开发工具提示我,要在pom文件里面加入一下依赖,不然会有警告 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency>         搞定后,在我们的主函数里面添加对这个配置项类的注入与使用的代码 @Autowired private Configs configs; @RequestMapping("/config3") public String config3() { StringBuilder sb = new StringBuilder("玩一玩配置项的封装,博客类型:"); sb.append(configs.getBlog()).append(",作者:").append(configs.getAuthor()); return sb.toString(); }         启动程序,浏览器访问http://127.0.0.1/sb/config3,结果如下截图

    3.profile配置

            实际开发过程中,我们经常遇到这样的问题:本地开发环境,和测试环境、生产环境的配置不同。各个环境,要么ip不同、要么端口不同、要么业务参数不同,导致的相同的程序,相同的配置文件名有着不太能同的配置信息。有时候新增配置项,由于编写投产手册的疏忽,导致配置出错而出现生成故障,这是很不应该的。         为了解决这个问题,Spring提出来profile的支持,即程序能同时配置多个子配置文件,通过修改主配置文件的指向来使用这些子配置文件的其中一个。下面我在我的项目中的src/resources/下,新建application-kaifa.yml和application-shengchan.yml两个配置文件,用来区分开发环境和生产环境。         生产环境的配置文件       开发环境的配置文件         主配置文件           现在的主配置文件,指明使用的配置文件是开发环境的,即使用application-kaifa.yml,此时我们的程序没有做任何的修改,我们启动程序,再次访问上面的config3,不过端口改了,http://127.0.0.1:6666/sb/config3,结果如下         说明程序已经成功加载到了开发环境的配置文件,现在我们再把主配置文件改为指向生产环境,再次访问config3,结果如下所示          能看出程序已经切换为生产环境的配置文件了。其实也并不是一定要主配置文件只有spring:profile:active项,然后其他的全都写在各个子配置文件中,当子配置文件的配置项相同,建议还是把这些相同的配置项写在主配置文件里面,不然以后改配置项也很容易改漏。         另外,当主配置文件和子配置文件存在相同配置时,程序还是会已子配置文件的为准,不信的话,就自动动手试试看吧!
    转载请注明原文地址: https://ju.6miu.com/read-37960.html

    最新回复(0)