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

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

        另外,当主配置文件和子配置文件存在相同配置时,程序还是会已子配置文件的为准,不信的话,就自动动手试试看吧!



评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值