tomcat中用classloader重新加载配置文件:
tomcat中从current thead中获取的class加载器为tomcat提供的WebappClassLoader,此classloader提供的getResourceAsStream方法会先根据资源路径到其已加载资源中查找,若找到则直接返回。反之则由classloader加载后返回,因此再资源文件更新以后,classloader不能侦测到,返回的输入流对应的资源文件为第一次加载的文件;
稍做改变可避免此问题:
先调用classloader的:public URL getResource(String name)
根据返回的URL再获取输入流,即避免了缓存的问题;
@SuppressWarnings("unchecked")
17
public Class loadClass(String classPath, String className)
18
throws ClassNotFoundException {
19
try {
20
String url = classPathParser(classPath)
21
+ classNameParser(className);
22
System.out.println(url);
23
URL myUrl = new URL(url);
24
URLConnection connection = myUrl.openConnection();
25
InputStream input = connection.getInputStream();
26
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
27
int data = input.read();
28
while (data != -1) {
29
buffer.write(data);
30
data = input.read();
31
}
32
input.close();
33
byte[] classData = buffer.toByteArray();
34
return defineClass(noSuffix(className), classData, 0,
35
classData.length);
36
} catch (MalformedURLException e) {
37
e.printStackTrace();
38
} catch (IOException e) {
39
e.printStackTrace();
40
}
41
return null;
42
}
分享到:
相关推荐
3. **Common ClassLoader**:Tomcat的Common ClassLoader,加载`$CATALINA_BASE/common/lib`目录下的JAR文件,这些类库对所有Web应用都可见。 4. **Webapp ClassLoader**:每个Web应用程序都有自己的Webapp ...
在Tomcat中,我们可以通过配置`catalina.properties`文件和`server.xml`文件来调整类加载策略,例如设置自定义的类加载顺序或启用共享类加载器。 此外,Tomcat还支持热部署,即在不重启服务器的情况下更新Web应用的...
ClassLoader根据全限定名来确定类的唯一性,并加载对应的类文件。 7. 反射与类加载 Java反射API允许在运行时动态获取类的信息并操作对象。在反射过程中,如果没有加载目标类,那么会触发ClassLoader的加载机制。 ...
在Java编程语言中,类加载器(ClassLoader)是运行时环境的核心组成部分,它负责将类的字节码从各种来源(如JAR文件、网络、内存等)加载到Java虚拟机(JVM)中,使得程序能够运行。本文将深入探讨“使用classloader...
4. 最后,如果所有父类加载器都未能加载,Catalina ClassLoader才加载Tomcat自身的类。 VSD文件可能包含一个流程图,详细描绘了Tomcat类加载器的工作流程和关系,这对于理解类加载机制非常有帮助。通过阅读和分析该...
在Spring框架中,classpath加载配置文件是应用开发中常见的操作。Spring框架提供了灵活的方式来加载位于classpath中的XML配置文件,这对于项目的模块化和可维护性至关重要。本文将详细分析Spring通过classpath加载...
### Tomcat加载顺序详解 Apache Tomcat作为一款广泛使用的开源Servlet容器,其类加载机制是理解和维护基于Tomcat的应用程序的重要部分。Tomcat的类加载器遵循特定的加载顺序,确保了不同应用间的隔离性和资源的正确...
本文旨在深入剖析Tomcat中特有的类加载器(ClassLoader)体系结构,帮助读者理解Tomcat如何管理和加载不同类型的类库。 #### 二、Tomcat的ClassLoader体系结构 Tomcat采用了独特的类加载机制来处理不同的类库加载...
【图解版】深入分析ClassLoader类加载工作机制,从原理到JVM的装载过程,详情分析了ClassLoader加载类以及自定义类加载器的过程,不可用于商业用途,如有版权问题,请联系删除!
类加载器在Tomcat中的配置可以通过`conf/catalina.properties`和`conf/context.xml`等文件进行调整。例如,可以通过修改`common.loader`、`shared.loader`和`context.loader`属性来改变类的加载顺序和来源。 在深入...
在Java编程语言中,ClassLoader是一个至关重要的组成部分,它负责加载类到JVM(Java虚拟机)中。了解和掌握ClassLoader的工作原理以及如何自定义ClassLoader对于深入理解Java应用程序的运行机制非常有帮助。以下是对...
当我们谈论"ClassLoader动态加载dex"时,实际上是指在Android应用程序运行时,通过自定义的ClassLoader来动态加载`.dex`(Dalvik Executable)文件,这是Android程序的字节码格式。这种技术在进行热修复、插件化或者...
3-7Tomcat中自定义类加载器的使用与源码实现(1).mp4
Tomcat通过自定义的类加载器实现了特定的类加载顺序,以确保能够正确处理不同来源的类文件,避免类的重复加载和类版本冲突问题。以下是Tomcat启动过程中类加载的具体顺序: #### 三、类加载顺序详述 1. **Bootstrap...