通常我们读取配置文件可以用@value注解和@configuration,@configurationproperties(prefix = “xxx”)等注解,但是这种方式是无法把配置读取到静态变量的,如果我们想在项目初始化时把配置文件加载到一个工具类,然后通过静态变量的方式调用的话我们就不能使用这两种方法。
不废话了,直接上代码
import javax.annotation.postconstruct; import org.springframework.beans.factory.annotation.autowired;import org.springframework.core.env.environment;import org.springframework.stereotype.component; /** * * @description: 配置常量类——根据不同的spring-profile加载不同的配置 * @author: eric.zhang * @date: 2018年7月20日 上午10:59:24 */@componentpublic class configconstant { @autowired private environment env; 网课小结 public static string url; public static string param; @postconstruct public void readconfig() { url = env.getproperty("config.url"); param = env.getproperty("config.param"); }}
我写完以后发现有些麻烦,下面是改进的方法,不需要每个配置都去get一下,只需要把配置文件的key与工具类的静态变量名写成一样的即可。
import java.io.unsupportedencodingexcep山枣tion;import java.lang.reflect.field; import javax.annotation.postconstruct; import org.springframework.beans.factory.annotation.autowired;import org.springframework.core.env.environment;import org.springframework.stereotype.component; /** * * @description: 配置常量类——根据不同的spring-profile加载不同的配置,变量名要与配置文件里写的名一致 * @author: eric.zhang * @date: 2018年7月20日 上午10:59:24 */@componentpublic class configconstant { @autowired private environment env; public static string url; public static string name; @postconstruct public void readconfig() throws exception { string prefix = "config."; field[] fields = configconstant.class.getfields(); for(field field : fields ){ field.t(null, getproperty(prefix + field.getname())); } } private string getproperty(string key) throws unsupportedencodingexception { return new string(env.getproperty(key).getbytes("iso-8859-1"), "utf-8"); }}
大哥说这样写依赖spring, 单测调代码的时候不方便,所以又写了一个不依赖spring的版本。
import java.io.inputstreamreader;import java.lang.reflect.field;import java.util.properties; /** * * @description: 配置常量类——根据不同的spring-profile加载不同的配置 * 变量名把配置文件的key中的"."替换成"_"命名 * @author: eric.zhang * @date: 2018年7月20日 上午10:59:24 */public class configconstant { public static string config_url; public static string config_name; static { try { properties props = new properties(); props.load(new inputstreamreader( configconstant.class.getclassloader().getresourceasstream("application.properties"), "utf-8")); string profile = props.getproperty("spring.profiles.active"); string envfile = "application-" + profile + ".properties"; properties envprops = new properties(); envprops.load(new inputstreamreader( configconstant.class.getclassloader().getresourceasstream(envfile), "utf-8")); field[] fields = configconstant.class.getfields(); for (field field : fields) { 床头柜高度标准尺寸 field.t(null, envprops.getproperty(field.getname().replace("_", ".").tolowerca())); } } catch (exception e) { e.printstacktrace(); } }}
项目结构:
创建pom文件,映入maven工程依赖
<?xml version="1.0" encoding="utf-8"?><project xmlns="http://maven.apache.org/pom/4.0.0" xmlns:xsi="/d/file/titlepic/xmlschema-instance" xsi:schemalocation="http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelversion>4.0.0</modelversion> <groupid>com.csrcb</groupid> <artifactid>spring_static</artifactid> <version>1.0-snapshot</version> <parent> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-parent</artifactid> <version>2.1.6.relea</version> </parent> <dependencies> <dependency> <groupid>org.springframework.boot</groupid> <artifactid>spring-boot-starter-web</artifactid> </dependency> <dependency> <groupid>org.projectlombok</groupid> <artifactid>lombok</artifactid> </dependency> </dependencies> </project>
在resource目录下,创建配置文件application.yml,创建几个不同环境的application-dev,application-sit、application-prod.yml的配置文件,稍后做测试使用,看是否加载不同环境下的配置参数的值
application.yml很简单就一个端口号的配置:
在application-dev.yml(开发环境的配置参数的值)、以及sit(测试)、uat(验证)、prod(生产)环境设置一些值
不同环境下的测试的配置参数的值不一致,为了测试参数名设置相同下,是否取得对应运行环境的值
1.创建加载配置文件的配置类
/** * @classname testconfig * @description 加载配置文件的配置类 * @date 2020/6/16 16:28 * @created by gangye */@configuration@datapublic class testconfig { @value("${ftp.urname}") private string urname; @value("${ftp.passwd}") private string passwd; @postconstruct public void init(){ clientutil.tconfiginfo(this); }}
2.创建工具类,工具类获得配置类的参数值
/** * @classname clientutil * @description 工具类,将配置文件的数据通过config引入到静态变量中 * @date 2020/6/16 16:29 * @created by gangye */@slf4jpublic class clien好听女生名字tutil { private static string urname; private static string passwd; public static void tconfiginfo(testconfig testconfig) { clientutil.urname = testconfig.geturname(); clientut人教版七年级上册数学教案il.passwd = testconfig.getpasswd(); } public static string getvalue(){ log.info("获得配置文件的urname的值:{}",urname); return urname; }}
3.创建路由,模拟调用
/** * @classname controller * @date 2020/6/16 16:35 * @created by gangye */@restcontroller@requestmapping(value = "/test")public class testcontroller { @getmapping("/getvalue") public string getvalue(){ return clientutil.getvalue(); }}
4.创建启动类,在启动类中添加bean,为了防止启动时配置类的@value注解找不到配置文件中的值,一个配置文件找不到继续找
/** * @classname appstart * @description 启动类 * @date 2020/6/16 16:26 * @created by gangye */@springbootapplicationpublic class appstart { public static void main(string[] args) { springapplication.run(appstart.class,args); }}
启动时添加对应的运行环境设置
-dspring.profiles.active=sit
若springboot版本低可能会出现
java.lang.illegalargumentexception: could not resolve placeholder ‘urname’ in value “${ftp.urname}”这样的报错
解决办法:在启动类中添加下面的代码
/** * caud by: java.lang.illegalargumentexception: could not resolve placeholder ‘name' in value “${name}” * @description 为了防止启动时配置类的@value注解找不到配置文件中的值,一个配置文件找不到继续找 * @date 2020年6月17日14:40:08 * @return */ @bean public static propertysourcesplaceholderconfigurer placeholderconfigurer(){ propertysourcesplaceholderconfigurer c = new propertysourcesplaceholderconfigurer(); c.tignoreunresolvableplaceholders(true); return c; }
再次启动环境(sit下)
在浏览器中输入:http://localhost:8000/test/getvalue
再指定prod环境下的运行
使用浏览器请求路由
关键使用了@value注解以及@postconstruct注解
以上为个人经验,希望能给大家一个参考,也希望大家多多支持www.887551.com。
本文发布于:2023-04-04 03:25:05,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/ab3ef9306b943d9c9f0621fcfc0e0759.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:springboot如何读取配置文件到静态工具类.doc
本文 PDF 下载地址:springboot如何读取配置文件到静态工具类.pdf
留言与评论(共有 0 条评论) |