您的位置:首页 > 编程语言 > Java开发

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

2017-04-05 00:10 856 查看
         上一节我们玩了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项,然后其他的全都写在各个子配置文件中,当子配置文件的配置项相同,建议还是把这些相同的配置项写在主配置文件里面,不然以后改配置项也很容易改漏。

        另外,当主配置文件和子配置文件存在相同配置时,程序还是会已子配置文件的为准,不信的话,就自动动手试试看吧!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  SpringBoot java