[Java] 使用springboot在工具类中读取配置文件(ClassPathResource)

  • A+
所属分类:其他教程
摘要

DSC0000.png 下载附件 2021-11-17 13:25 上传DSC0001.png 下载附件 2021-11-17 13:25 上传

这篇文章主要介绍了使用springboot在工具类中读取配置文件(ClassPathResource),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
springboot工具类中读取配置文件
1、创建配置文件(application.properties)

spring.activemq.broker-url=tcp://localhost:61616 spring.activemq.user=admin spring.activemq.password=admin spring.activemq.in-memory=true spring.activemq.pool.enabled=false

2、创建工具类(PropertiesUtil.java)

package com.jeff.utils; import java.io.IOException; import java.util.Properties; import org.springframework.core.io.ClassPathResource; import org.springframework.core.io.support.PropertiesLoaderUtils; public class PropertiesUtil {   private static String user;   static {     System.out.println("application.properties属性文件读取开始");     ClassPathResource resource = new ClassPathResource("application.properties");     try {       Properties properties = PropertiesLoaderUtils.loadProperties(resource);       user = properties.getProperty("spring.activemq.user");       System.out.println("user的值:" + user);     } catch (IOException e) {       System.out.println("application.properties属性文件读取异常" + e);     }     System.out.println("application.properties属性文件读取完成");   }   public static String getUser() {     System.out.println("获取user的值:" + user);     return user;   } }

3、创建测试类(MyController.java)

package com.jeff.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.jeff.utils.PropertiesUtil; @RestController public class MyController {   @RequestMapping("myTest")   public String myTest() {     PropertiesUtil.getUser();     return "success";   } }

4、打开浏览器访问 http://localhost:8080/myTest,控制台输出结果

[Java] 使用springboot在工具类中读取配置文件(ClassPathResource)

DSC0000.png

2021-11-17 13:25 上传

[Java] 使用springboot在工具类中读取配置文件(ClassPathResource)

DSC0001.png

2021-11-17 13:25 上传

springboot读取配置文件到静态工具类
通常我们读取配置文件可以用@Value注解和@Configuration,@ConfigurationProperties(prefix = "xxx")等注解,但是这种方式是无法把配置读取到静态变量的,如果我们想在项目初始化时把配置文件加载到一个工具类,然后通过静态变量的方式调用的话我们就不能使用这两种方法。
这时候,我们可以用Environment 来解决
不废话了,直接上代码

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  */ @Component public 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.UnsupportedEncodingException; 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  */ @Component public 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.set(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.set(null, envProps.getProperty(field.getName().replace("_", ".").toLowerCase()));     }   } catch (Exception e) {     e.printStackTrace();   }   } }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持OPEN开发家园
原文链接:https://blog.csdn.net/weixin_45739720/article/details/103701627

关注下面的标签,发现更多相似文章
  • ClassPathResource
  • springboot
  • 主要
  • Cla
  • 配置
  • 使用

  • 我的微信公众号
  • 扫一扫关注
  • weinxin
  • 我的新浪微博号
  • 扫一扫关注
  • weinxin
小辉博客

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: