springboot读取配置文件方式及实用

前言

springboot读取配置文件的方式与使用,都是老生常谈的话题了

写这篇文章,是因为项目中有个奇怪的需求: 提示语作为配置,方便修改,我也不知道为啥有这种需求,也不是为了国际化,单纯的想改个文案而已

读取配置文件方式

使用配置文件的场景是必须的,比如数据库的配置,kafka,redis等配置都需要做配置文件,还有自定义配置,那么如何读取到呢?(只列举常用的)

只考虑配置不重名的情况,如果重名,搭配@PropertySource(“classpath:my.properties”) 使用

1.@Value注解

这是最简单的方式,在类属性上使用value注解,注解参数就是配置文件中的key值,就可以了,代码如下:
application.properties

person.age=10
person.name=jinitaimei

(使用yml也能生效,注意yml文件的格式即可)

person.java

public class StudentController {
    @Value("${person.age}")
    private String age;
    
    @Value("${person.grand:xiaoming}")
    private String grand;
}

启动项目后,age中就会有值了,也就是 10 , grand值是xiaoming,这是使用默认值,如果找不到配置就会使用默认值

任何类中都可以使用,不过一般会在控制层和业务层使用嘛;
默认值我用在swagger中,当做开关使用,默认为关,甚为好用

2.@ConfigurationProperties注解

如果你有大量的配置,比如redis的配置,使用value注解,就不太好用了, configurationProperties注解可以批量注入

@ConfigurationProperties(prefix = "person")
public class StudentController {
  
    private String age;
    
    private String name;
}

启动项目后,age和name属性就会有值,应该很容易看懂吧,如果找不到配置则不会注入;
prefix写不写都可以,这个注解做了别名,见其源码可知

3.使用 Environment

顾名思义,这个环境配置类,不光能读取配置文件,还能读取系统变量,比如jdk版本,当前操作系统类型,用户目录等等

import org.springframework.core.env.Environment;
public class BaseControll {
	@Autowired
	public Environment env;

	private   String getMessage() {
		String property = env.getProperty("person.name", String.class, "defaultName");
		return property ;
	}
}

配上枚举做成返回码,甚是好用,项目的需求,我就是用这种方式做的,如下:

private   String getMessage(ResponseEnum resultCode, Object[] objs) {
		String property = env.getProperty(resultCode.getCode(), String.class, resultCode.getMsg());
		return String.format(property, objs);
}

4.使用国际化功能

国际化就是为了满足不同地区的使用,简单的说,就是英文环境使用英文展示,中文环境使用中文展示,springboot支持很多语种,其原理就是,能读取对应的配置文件,从而展示不同语言内容,读取文件的方式是通过流读到一个map中 ,
国际化的读取和上面几种有点不同,国际化只能读取properties文件,
默认读取的配置文件是message.properties,
中文配置文件名:message_zh_CN.properties
英文配置文件名:message_en_US.properties
会优先读取带环境的配置文件,如果找不到配置则会找默认的配置文件

若想更改默认配置文件名,在配置文件中加入配置: spring.messages.basename=responseCode, 则会读取 responseCode.properties,对应环境名也随之改变(多看看源码,了解其原理,这种东西就自然理解了,就不用费口舌了)

我们若仅使用它的读取配置文件功能,显得杀鸡用牛刀,所以这里简单描述一下,以后再补一篇国际化

import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
public class BaseControll {

	private static final Locale locale = LocaleContextHolder.getLocale();
	@Resource
	public   MessageSource msg;

	private   String getMessage(ResponseEnum resultCode, Object[] objs) {
	    return msg.getMessage(resultCode.getCode(), objs,resultCode.getMsg(), locale);
	}
}

我这里确定使用环境的方式是取当前时区,是最简单的方式,也是不准确的,合理的做法是,在通过请求header中的accept-language字段确定其环境或者前端传参数来确定,具体的可参考 https://www.jianshu.com/p/e2eae08f3255

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值