`

tomcat 中 java 解析properties(实时变化)

阅读更多
有个朋友要用getClass().getResourceAsStream() 提取test.properties

但是在服务器运行过程中 无论怎么更改test.properties

得出的数据还是最初的那个

我后来试了一下 代码如下
package test;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class Test {
    Properties pp = null;

    public Properties getData() throws IOException {
        InputStream is = getClass().getResourceAsStream("/test.properties");
        // InputStream is = new FileInputStream(
        // "D:\\java\\apache-tomcat-5.5.17\\apache-tomcat-5.5.17\\webapps\\testp\\WEB-INF\\classes\\test.properties");
        System.out.println(is.hashCode());
        pp = new Properties();
        pp.load(is);
        System.out.println(pp.hashCode());
        // Properties pp = System.getProperties();
        // Enumeration<String> enu = (Enumeration<String>) pp.propertyNames();
        // while(enu.hasMoreElements()){
        // String name = enu.nextElement();
        // System.out.println(name + "=" +pp.getProperty(name));
        // }
        // is.close();
        is.close();
        return pp;
    }

    public static Properties getProperties() {
        try {
            return new Test().getData();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) {
        while (true) {
            System.out.println(getProperties());
            try {
                Thread.sleep(1000L);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}
上面这个解析的Properties pp 的hashcode 始终不变

而InputStream 的hash 缺一直改变

由此可以推断结论有
getClass().getResourceAsStream() 是ClassLoader 加载Class一样的把test.properties 加载进了内存


但是针对上面的红字我写了MAIN函数做为测试

现在发现如果我更改Properties ,会立刻做出反应

main函数中的代码我的理解如下 每次ClassLoader都在加载ClassPath下的文件,当发现改变就构成Properties 改变

所以我想这是不是tomcat的ClassLoader 的一个bug ??

所以如果想test.properties随时变 用绝对路径 InputStream is = new FileInputStream("绝对路径")
就可以了

主要是因为把资源文件放在classpath下了,而改变了以后,资源文件没有重新编译,因此放入非classpath目录下就可以了
分享到:
评论

相关推荐

    tomcat启动原理解析

    - Tomcat会读取`conf/catalina.properties`、`conf/server.properties`等配置文件,获取服务器的默认设置。 - `webapps`目录下的每个应用都有对应的`WEB-INF/web.xml`,定义了应用的部署信息,Tomcat会逐一解析...

    Tomcat6.0.35源码JAVA应用.zip

    Tomcat使用`java.util.logging`API进行日志记录,用户可以在`logging.properties`文件中定制日志级别和输出方式。此外,`GlobalNamingResources`元素用于全局资源的定义,如数据源,错误页面的处理也在这里进行配置...

    Tomcat6.0,基于java的网络服务器

    描述中的“目前主流的小型javaweb服务器,经典”意味着在Tomcat 6.0发布时,它是Java Web开发领域广泛应用的服务器,并且因其经典设计和稳定性能而备受推崇。虽然现在可能有更高级的版本,如Tomcat 9或更高,但...

    JAVA高手解析XML配置文件的读取操作.pdf

    在 Java 开发中,XML 配置文件的使用变得越来越普遍,许多项目都开始使用 XML 作为配置文件的格式,例如 Tomcat 的安装配置文件和 J2EE 的配置文件。使用 XML 作为配置文件有很多好处,例如可以轻松地更改配置项,而...

    bootstrap开启与关闭tomcat

    在main方法中,Bootstrap会加载服务器的全局配置文件,如`catalina.properties`,并创建`Catalina`实例,这是Tomcat的主要容器。 2. **服务器配置**: `Catalina`实例会读取`server.xml`等配置文件,解析并构建...

    tomcat9资源上传用于部署

    "java"标签表明这个话题与Java编程语言紧密相关,因为Tomcat是Java应用服务器,主要用于运行Java Web应用。这涉及到Java Servlet、JavaServer Pages(JSP)等技术,以及可能涉及的Java EE相关框架如Spring或Struts。...

    tomcat5.0.30

    总的来说,Tomcat 5.0.30是Java Web开发历程中的一个重要版本,它奠定了现代Web应用服务器的基础,并且在许多方面影响了后来的Tomcat版本和其他应用服务器的设计。通过学习这个版本,开发者可以深入了解Web服务器的...

    tomcat及其配置文件

    Tomcat的运行离不开Java Development Kit(JDK),因为Tomcat需要JDK中的Java运行环境来解析和执行Servlet。因此,在安装和配置Tomcat之前,首先需要确保系统上已经安装了与Tomcat版本兼容的JDK。 Tomcat的核心配置...

    Tomcat解决跨域的两个jar包java-property-utils-1.9.jar和cors-filter-1.7.jar

    3. 使用`java-property-utils-1.9.jar`读取并解析这个配置文件,将其配置到Filter中。 4. 在`web.xml`配置文件中,定义`CORSFilter`并绑定到相应的URL模式: ```xml &lt;filter-name&gt;CORSFilter &lt;filter-class&gt;...

    apache-tomcat-6.0.9 windows版

    Apache Tomcat作为一款轻量级的应用服务器,它主要负责处理基于Java的Web应用程序,如动态网页、Java小应用程序(JApplets)以及Java EE中的Servlet和JSP。Tomcat以其简单易用、性能稳定和低资源消耗而受到开发者的...

    解决Tomcat跨域的jar包,java-property-utils-1.9.jar

    在Tomcat中,配置跨域通常涉及到修改`web.xml`文件或者使用Filter来设置响应头,这些操作可能需要读取和解析配置文件,这时`java-property-utils`就派上用场了。例如,我们可以用它来读取服务器配置中的跨域允许的...

    apache-tomcat-9.0.31.zip

    Apache Tomcat是一款开源的Java Servlet容器,...总之,Apache Tomcat是一个强大且灵活的Java Web服务器,适用于开发和部署中小型应用。通过理解和配置其核心组件,你可以有效地管理你的Web服务,提高开发和运维效率。

    Apache+Tomcat环境搭建

    - 在 Apache 的 `conf` 目录下创建 `workers.properties` 文件,该文件定义了 Tomcat 的位置(`tomcat_home`)和 Java 安装路径(`java_home`)。同时,它还设置了 AJP 连接器(`ajp13`)的端口(8009)和主机...

    apache-tomcat-9.0.52-linux.zip

    Apache Tomcat是一款开源的Java Servlet...总之,Apache Tomcat是一个强大的、轻量级的Java Web应用服务器,广泛应用于各种规模的企业和项目中。理解和掌握如何配置、管理及优化Tomcat对于Java Web开发者来说至关重要。

    tomcat-7.0.26.tomcat-juli.jar

    《深入解析Tomcat 7.0.26的Juli日志系统》 在Java Web应用服务器领域,Tomcat无疑是最受欢迎的选择之一。Tomcat 7.0.26版本中的`tomcat-juli.jar`文件是其核心组件之一,主要用于提供日志处理功能。本文将深入探讨`...

    Tomcat 5帮助文档

    它主要负责解析并执行Java Servlets以及服务JavaServer Pages (JSP)。作为轻量级应用服务器,Tomcat以其小巧、高效、易于配置而受到开发者们的青睐。这份“Tomcat 5帮助文档”将涵盖以下关键知识点: 1. **Tomcat...

    tomcat9.0.44.zip

    《深入解析SpringBoot内置Tomcat 9.0.44》 在现代Java Web开发中,SpringBoot框架因其便捷性和高效性受到了广泛欢迎。其中,SpringBoot内置的Tomcat服务器是许多开发者首选的轻量级应用服务器。本文将详细探讨...

    apache-tomcat-6.0.13

    Tomcat主要负责解析HTTP请求,并将这些请求转发给Java Servlets或JSP页面进行处理。处理完成后,Tomcat再将响应返回给客户端。Tomcat支持多线程处理,能够同时处理多个请求,具备高并发能力。 在安装Apache Tomcat ...

    apache-tomcat-6.0.32

    Apache Tomcat 6.0.32 是一个广泛使用的开源软件,主要作为Java Servlet和JavaServer Pages(JSP)的应用服务器。它实现了Java EE的Web应用程序容器标准,为开发者提供了一个轻量级、高效的平台来部署和运行Java Web...

    使用embeded tomcat进行嵌入式javaee开发-启动tomcat

    只需在`application.properties`或`application.yml`中配置服务器端口,Spring Boot就会自动处理Tomcat的初始化和启动。 总的来说,embeded Tomcat使得JavaEE开发变得更加便捷,允许开发者在本地环境中快速迭代和...

Global site tag (gtag.js) - Google Analytics