classpath 及读取 properties 文件

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/molashaonian/article/details/79245319

java代码中获取项目的静态文件,如获取 properties 文件内容是必不可少的。

Spring 下只需要通过 @Value 获取配置文件值

<!-- 资源文件-->
<util:properties id="application" location="classpath:config.properties" />
@Value("#{application['pom.credit.url']}")
private void setCreditUrl(String url){
   this.creditUrl = url;
}

Spring boot 下我们只需要在 config 目录下的 application.yml 中写入配置值如:

local-info:
    school-id: test
通过 @ConfigurationProperties 注解加载 local-info 下的配置,通过 set 方法注入 school-id 

@ConfigurationProperties(prefix="local-info")
@Component
public class LocalConfigEntity {
    private String schoolId;
之后再需要用到 schoolId 则通过 get 方法获取值

上面简单的提及下通过框架我们可以很容易获取到配置文件账值,但当我们离开这些框架,该如何读取这些配置文件,上图解:


用 Properties 类读取 properties 文件

static {
   Properties prop = new Properties();
   InputStream in = UserUtil.class.getResourceAsStream("/config.properties");
   try {
      prop.load(in);
      param1 = prop.getProperty("param1").trim();
      param2 = prop.getProperty("param2").trim();
   } catch (IOException e) {
      e.printStackTrace();
   }
}

这里补充 classpath 路径说明

 classpath 路径在每个J2ee项目中都会用到,即WEB-INF下面的classes目录,所有src目录下面的java、xml、properties等文件编译后都会在此,所以在开发时常将相应的xml配置文件放于src或其子目录下;

          引用classpath路径下的文件,只需在文件名前加classpath:(需保证该文件确实位于classpath路径下);

如:

Xml代码   收藏代码
  1. <param-value>classpath:applicationContext-*.xml</param-value>  

或者引用其子目录下的文件,如  

Xml代码   收藏代码
  1. <param-value>classpath:context/conf/controller.xml</param-value>  

 classpath* 的使用:当项目中有多个classpath路径,并同时加载多个classpath路径下(此种情况多数不会遇到)的文件,*就发挥了作用,如果不加*,则表示仅仅加载第一个classpath路径,代码片段: 

Xml代码   收藏代码
  1. <param-value>classpath*:context/conf/controller*.xml</param-value>  

 ########################################################

首先  classpath是指 WEB-INF文件夹下的classes目录 
解释classes含义: 
1.存放各种资源配置文件 eg.init.properties log4j.properties struts.xml 
2.存放模板文件         eg.actionerror.ftl 
3.存放class文件       对应的是项目开发时的src目录编译文件 
总结:这是一个定位资源的入口 

如果你知道开发过程中有这么一句话:惯例大于配置 那么也许你会改变你的想法 
对于第二个问题  
这个涉及的是lib和classes下文件访问优先级的问题:  lib>classes 
对于性能的影响应该不在这个范畴 

 ########################################################

注意: 
用classpath*:需要遍历所有的classpath,所以加载速度是很慢的,因此,在规划的时候,应该尽可能规划好资源文件所在的路径,尽量避免使用 classpath* 

网上还提到了用反射获取 properties 文件路径:

Java项目中读取properties文件,以及六种获取路径的方法

五种方式让你在java中读取properties文件内容不再是难题

关注公众号,分享干货,讨论技术


猜你喜欢

转载自blog.csdn.net/molashaonian/article/details/79245319