当前位置: 首页 > 面试题库 >

重新加载使用setBundle加载的属性文件

齐驰
2023-03-14
问题内容

我希望对我在Spring中涉及到属性文件的问题有所帮助。所以我的设置是这样的:

opto-mapping.properties –该文件位于我的src文件夹中,其中包含针对我的优化资源的翻译,如下所示:

generic-min.css=4037119659.css

每次运行“优化”构建时,都会更新此属性文件。然后我用

<fmt:setBundle basename="opto-mapping" />

将属性文件导入所需的jsp中。然后通过使用以下内容引用内容:

<fmt:message key='generic-min.css' />

除了属性文件需要重新启动tomcat重启外,所有这些工作都很漂亮。我不想每次资源更新时都必须关闭网站。我希望属性文件能自动重载。

我确实尝试过在spring-context.xml中更新现有的bean来重新加载此属性文件,就像我对翻译所做的那样,但这没有用-很有可能是因为opto-
mapping.properties文件位置-但您看到它需要使用fmt:setBundle在该位置加载。

<bean id="messageSource"
        class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="cacheSeconds">
            <value>1</value>
        </property>
        <property name="basenames">
            <list>
                <value>WEB-INF/translations/translations</value>
                <value>WEB-INF/classes/opto-mapping</value>
            </list>
        </property>
</bean>

在这个困难的时刻,我们将不胜感激任何帮助或指向正确方向的观点。

我希望所有这些事能引起大家的感谢,并在此先感谢!

G。


问题答案:

您可以尝试一些方法。

<fmt:setBundle>最终将调用ResourceBundle.getBundle(String, Locale, ClassLoader),其中字符串将是您的基名,而类加载器将是Thread.currentThread().getContextClassLoader()。如果您使用的是JDK
1.6,则可以尝试使用ResourceBundle.clearCache(ClassLoader)清除捆绑包缓存。在Servlet过滤器中执行此操作,并将其与其他一些逻辑结合以确定何时应该清除缓存,将是有意义的。

另一个角度是更直接地控制属性文件的加载和JSTL的配置。同样,利用过滤器(忽略异常处理):

ClassLoader ctxLoader = Thread.currentThread().getContextClassLoader();
URL propsURL = ctxLoader.getResource("opto-mapping.properties");
URLConnection propsConn = propsURL.openConnection();
long propsLastModified = propsConn.getLastModified();
// decide if you want to reload...
propsConn.setUseCaches(false);
InputStream propsIn = propsConn.getInputStream();
ResourceBundle propsBundle = new PropertyResourceBundle(propsIn);
propsIn.close();
LocalizationContext propsCtx = new LocalizationContext(propsBundle);
ServletContext servletCtx = this.filterConfig.getServletContext();
Config.set(servletCtx, Config.FMT_LOCALIZATION_CONTEXT, propsCtx);

然后,您可以仅<fmt:message>在页面中使用。你可以找到的文档LocalizationContextConfig中JSTL
API

可能有许多其他变体,但是请确保查看JDK 1.6
的较新版本ResourceBundle(包括ResourceBundle.Control),并牢记“底层”
API的功能,例如URLConnection,并熟悉可用的JSTL的更多编程方面。通过其API。



 类似资料:
  • 问题内容: 我在Spring 3中使用属性文件。当Spring初始化其contex时,它将加载属性文件,并将其放入带有@Value批注的所有bean中。 我希望有可能更新文件中的某些属性,并在服务器上公开一个JMX,该JMX将新属性重新加载到Spring中-无需重新启动服务器并重新加载其上下文。 我可以通过使用一些 Spring方法 来重新加载属性并将其填充到所有bean中来实现此功能,还是应该自

  • 我在尝试添加

  • 我有两个项目,CarpoolDB和拼车。 CarpoolDB:包含后端的东西 拼车应用程序上下文。xml server.properties 我做了一罐carpoolDB和地方拼车应用程序 拼车:包含UI东西和后端联系人carpoolDB jar,并具有 carpool-application-context1.xml spring-servlet.xml 拼车。性质 现在,我有一个类com.on

  • 问题内容: 我已经编写了一个PropertyUtils类(来自互联网),它将加载属性 而PropertiesUtil类如下所示 稍后,我可以通过调用PropertiesUtil.getProperty()方法来获取属性。 但是现在我要稍作修改,以便如果myApp.properties被用户修改/更改,则应再次加载 可能我需要FileWatcher类 但我的怀疑是 如何使用classpath:myA

  • 我已经写了一个PropertyUtils类(来自互联网),它将加载属性 PropertiesUtil类如下所示 稍后,我可以通过调用PropertiesUtil来获取属性。getProperty()方法。 但现在我想稍微修改一下,如果myApp。属性被用户修改/更改,应该重新加载 可能我需要FileWatcher类 但我的疑虑是 如何使用classpath创建File对象:myApp/myApp.

  • 问题内容: 我在程序中需要一个配置文件来存储一些信息,我看到了一些属性文件的示例,并试图使用它们,但是每当在NetBeans上尝试第二行时,我都会得到“ Package sortConfig不存在”,“ >预期”和“类型非法开始”。 问题是我已经看到大约10个示例都以相同的方式执行此操作,而我不知道发生了什么。 任何帮助,将不胜感激 我的.java类和我的属性文件位于src的同一包文件夹中 问题答