zoukankan      html  css  js  c++  java
  • classpath 及读取 properties 文件

    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文件内容不再是难题


  • 相关阅读:
    【原】用Java编写第一个区块链(二)
    SpringBoot 下配置 IDEA 热部署
    【原】用Java编写第一个区块链(一)
    【译】如何入门区块链学习
    轻量级微服务架构【读书笔记4】
    Ubuntu 下命令安装 ZooKeeper
    Ubuntu 下命令安装 Java
    集体智慧编程1寻找相近用户
    SfM执行流程
    SfM环境的搭建windows8.1+vs2010
  • 原文地址:https://www.cnblogs.com/molashaonian/p/8763343.html
Copyright © 2011-2022 走看看