SpringBoot-从入门到放弃(四) 配置文件的更多玩法
2017-04-05 00:10
856 查看
上一节我们玩了SB的properties配置文件和yml配置文件,这篇我们继续玩,玩一玩一些实用好玩的
YAML配置文件如下(hehe不是系统的配置项,所以有警告)
程序代码如下
启动程序,分别访问http://127.0.0.1:12345/sb/config和http://127.0.0.1:12345/sb/config2,结果如下
使用@ConfigurationProperties注解时,开发工具提示我,要在pom文件里面加入一下依赖,不然会有警告
搞定后,在我们的主函数里面添加对这个配置项类的注入与使用的代码
启动程序,浏览器访问http://127.0.0.1/sb/config3,结果如下截图
为了解决这个问题,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项,然后其他的全都写在各个子配置文件中,当子配置文件的配置项相同,建议还是把这些相同的配置项写在主配置文件里面,不然以后改配置项也很容易改漏。
另外,当主配置文件和子配置文件存在相同配置时,程序还是会已子配置文件的为准,不信的话,就自动动手试试看吧!
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项,然后其他的全都写在各个子配置文件中,当子配置文件的配置项相同,建议还是把这些相同的配置项写在主配置文件里面,不然以后改配置项也很容易改漏。
另外,当主配置文件和子配置文件存在相同配置时,程序还是会已子配置文件的为准,不信的话,就自动动手试试看吧!
相关文章推荐
- spring boot 入门学习(二)配置文件注解
- springboot入门(一)文件配置和运行
- 【SpringBoot】SpringBoot之入门配置文件
- springboot【2】入门之配置文件
- springboot配置文件加载不到的问题
- spring入门之ssh中事务处理,数据库连接,spring配置文件
- Spring Boot application.propertis配置文件的相关通用属性
- spring-boot 加载本地静态资源文件路径配置
- spring boot项目配置文件集合
- Spring Boot 配置文件模板
- Spring-boot中利用外部配置文件生成数据源
- Spring3.0 入门进阶(1):从配置文件装载Bean
- Spring3.0 入门进阶(1):从配置文件装载Bean
- Spring Boot属性配置文件
- spring boot log4j2配置(使用log4j2.yml文件)
- Spring Boot教程(二)--- 推荐的基础 POM 文件和自动配置
- Spring boot 通用配置文件模板
- spring-boot配置文件
- spring-boot 加载本地静态资源文件路径配置
- spring boot配置文件