`
zjloop_
  • 浏览: 69236 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JDK1.6 ResourceBundle 在tomcat下刷新资源文件

 
阅读更多

JDK1.6下 ResourceBundle  本身提供了 ResourceBundle.clearCache(); 方法,在eclipse 下正常测试都是可以正常刷新到修改后资源文件的值,不过当部署到tomcat下后,ResourceBundle.clearCache();这个方法, 看起来就不起作用了。

经过一翻调试,终于可以了,贴上代码:

private static ResourceBundle resourceBundle;

	private static long lastUpdateTime = 0l;

	private static final Logger LOGGER = Logger.getLogger(ResourceBundleService.class);

	private ResourceBundleService() {

	}

	/**
	 * 载入 ResourceBundle
	 */
	public static void loadResourceBundle() {
		try {
			// 这个是必须的
			ResourceBundle.clearCache();
		        //产生ResourceBundle对象时,
			//重写ResourceBundle.Control 的newBundle方法,
			//将reload标识位置为true
			resourceBundle = ResourceBundle.getBundle("resource", new Locale(GameConfig.locale.substring(0, 2),
					GameConfig.locale.substring(3, 5)), new ResourceBundle.Control() {
				public ResourceBundle newBundle(String baseName, Locale locale, String format, ClassLoader loader,
						boolean reload) throws IllegalAccessException, InstantiationException, IOException {
					// 将reload标识位置为true
					return super.newBundle(baseName, locale, format, loader, true);
				}

			});
			lastUpdateTime = System.currentTimeMillis();
		} catch (MissingResourceException e) {
			LOGGER.error("There is no " + GameConfig.locale + " resource file found!!");
		}
	}

	/**
	 * 资源文件有改动时才会重新载入 ResourceBundle
	 */
	public static void reloadResourceBundle() {
		final String absPath = Thread.currentThread().getContextClassLoader().getResource("").getPath().replaceAll(
				"%20", " ");
		final StringBuffer resourceFullName = new StringBuffer(512);
		resourceFullName.append(absPath);
		resourceFullName.append("resource_");
		resourceFullName.append(GameConfig.locale);
		resourceFullName.append(".properties");
		final File resFile = new File(resourceFullName.toString());
		if (resFile.exists()) {
			if (resFile.lastModified() > lastUpdateTime) {
				System.out.println(("lastUpdateTime==" + lastUpdateTime + " Curr lastModified:" + resFile
						.lastModified()));
				ResourceBundleService.loadResourceBundle();
			}
		} else {
			LOGGER.error("resorce file not found :" + resourceFullName.toString());
		}
	}

 

主要做了两个事:

1.调用了ResourceBundle.clearCache();

2.产生ResourceBundle对象时, 重写ResourceBundle.Control 的newBundle方法,

 将reload标识位置为true

 

定时检测到资源文件,有改动时重生成ResourceBundle实例,就可以获取到最新的资源文件值。

 

分享到:
评论

相关推荐

    tomcat8.5.20+jdk1.7或jdk1.8或jdk1.6

    然而,对于JDK 1.6,虽然在Tomcat 8.5的早期版本中可能可以运行,但随着Java新特性的引入,Tomcat的后续版本可能会逐渐弃用对较旧JDK的支持,因此不建议在生产环境中使用JDK 1.6搭配Tomcat 8.5.20。 在实际运维中,...

    jdk1.6版本附加tomcat1.6

    在JDK 1.6中,重点改进包括: 1. **增强的Swing组件**:JDK 1.6对Swing库进行了大量更新,提升了GUI应用程序的性能和用户体验。例如,添加了新的LookAndFeel和组件,使得桌面应用更美观。 2. **改进的内存管理**:...

    苹果电脑安装jdk1.6 mac for jdk1.6 jdk6 安装版

    mac for jdk1.6 jdk6 安装版 里面有两个jdk1.6的安装包,都可以用 如果电脑上安装有1.7,1.8等高版本jdk就不要再下安装包了,安装包安装会报错 命令是这个:brew install java6或 brew install homebrew/cask-...

    tomcat7,正常,可用,需要jdk1.6版本

    【描述】"压缩包中是Tomcat7, 正常, 可用, 需要JDK1.6版本" 提供了更具体的信息,即提供的文件是一个包含Tomcat7的压缩包,该服务器环境已经配置完成,可以正常启动和使用。然而,重要的是要理解,为了使这个Tomcat...

    jdk1.6+tomcat7.0.90

    标题“jdk1.6+tomcat7.0.90”指的是这个压缩包包含了Java Development Kit(JDK)的1.6版本和Apache Tomcat服务器的7.0.90版本,这两个组件都是IT领域中非常重要的软件工具,主要用于开发和部署Java应用程序。...

    jdk1.6集成jjwt的问题

    标题中的“jdk1.6集成jjwt的问题”指的是在Java Development Kit (JDK) 版本1.6的环境下,尝试整合JSON Web Token (JWT) 库jjwt时遇到的挑战。JWT是一种开放标准(RFC 7519),用于在各方之间安全地传输信息作为 ...

    jdk1.6压缩包,下载即用

    - **下载**:从Oracle官网或其他可信源下载JDK 1.6的安装文件,如"jdk1.6.exe"。 - **安装**:双击执行安装文件,按照向导步骤进行安装,选择合适的安装路径。 - **环境变量设置**:安装完成后,需要在系统环境变量...

    springboot web程序运行在jdk1.6、tomcat6的demo

    这个Demo项目展示了如何在较旧的环境,如JDK 1.6和Tomcat 6上运行SpringBoot 1.5.6的Web程序。尽管SpringBoot通常建议使用更新的Java版本和内置的Tomcat服务器,但有时由于兼容性或遗留系统的需求,可能需要在较低...

    JDK1.6版本下载

    总的来说,JDK 1.6在提升开发效率、运行性能以及安全性等方面都有显著的进步,是Java发展历程中不可或缺的一环。对于那些需要在旧系统上运行或兼容JDK 1.6的应用来说,了解并掌握这个版本的特性至关重要。

    jdk1.6 64位+tomcat6.0.45_64位 官方正式版 -windows-x64

    Java开发工具包(JDK)1.6 64位和Tomcat 6.0.45 64位是两个关键组件,用于在Windows x64操作系统上构建和部署Java应用程序,特别是Web应用程序。以下是关于这两个组件及其相关知识点的详细说明: 1. **Java ...

    okhttp3.8源码使用jdk1.6重新编译_okhttp3.8.0-jdk1.6.zip

    1.okhttp3.8源码使用jdk1.6重新编译,已集成了okio,在javaweb项目中使用,未在安卓项目中使用 2.okhttp3.8源码使用jdk1.6重新编译_okhttp3.8.0-jdk1.6.jar

    jdk1.6免安装版

    在压缩包文件名称列表中只列出了一个文件名"jdk1.6",这可能是整个JDK1.6的压缩文件。解压后,用户通常会找到以下目录结构: - bin:包含可执行文件,如javac、java等。 - lib:包含JDK的类库和资源文件。 - doc:...

    aspose-words-15.8.0-jdk1.6

    aspose-words-15.8.0-jdk1.6aspose-words-15.8.0-jdk1.6aspose-words-15.8.0-jdk1.6aspose-words-15.8.0-jdk1.6aspose-words-15.8.0-jdk1.6aspose-words-15.8.0-jdk1.6aspose-words-15.8.0-jdk1.6aspose-words-...

    JDK1.6百度云下载

    综上所述,JDK1.6虽然已经不是最新版本,但在某些应用场景下仍然具有一定的实用价值。了解其主要特性以及如何安全地下载和安装,对于开发者来说都是非常重要的。同时,在分享和下载资源时也要注意遵守相关规定,确保...

    tomcat+jdk 1.6

    标题“tomcat+jdk 1.6”暗示了我们正在讨论的是使用Java开发环境,具体是JDK 1.6版本以及Tomcat 6应用服务器的集成与配置。这两个组件在早期的Java Web应用程序开发中非常常见。让我们深入探讨一下它们各自的功能、...

    jdk1.6 解压版-windows

    在Windows环境下使用JDK1.6,你需要设置环境变量,主要包括`JAVA_HOME`指向JDK的安装目录,以及`PATH`添加%JAVA_HOME%\bin,确保系统可以找到JDK的可执行文件。 JDK1.6相对于更早的版本,引入了一些新特性,如: -...

    jdk1.6的文件

    6. **NIO.2**:Java 7之前,Java的非阻塞I/O特性在NIO(New I/O)包中,而在JDK1.6中,虽然没有完整的NIO.2,但已经开始引入了一些新特性,如FileChannel的transferTo和transferFrom方法,用于提高文件传输效率。...

    okhttp3.8.0-jdk1.6.zip

    使用OkHttp3.8.0-jdk1.6.jar,开发者可以在JDK1.6的环境下享受到高效且稳定的网络请求服务。同时,结合json-20160810.jar,可以实现数据的快速转换,进一步提升项目的开发效率。对于那些需要在老版本Java环境中工作...

    jdk1.6jar包

    这个特定的更新主要集中在错误修复和安全补丁上,确保开发者在使用JDK 1.6时,能避免已知的安全风险,同时提高系统的稳定性。这些更新可能包括对Java插件、Java运行时环境、Javadoc工具、Java编译器等各个组件的改进...

    jdk1.6 32位免安装纯绿色版

    然而,在某些特殊情况下,如旧项目维护或与特定版本的软件兼容性需求,仍然可能需要使用JDK 1.6。 总的来说,这个JDK 1.6 32位免安装纯绿色版是一个便捷的开发工具,适用于那些需要快速部署Java环境或者仍在维护...

Global site tag (gtag.js) - Google Analytics