Dynamically upload files on class path using ReloadableResourceBundleMessageSource

I am new to Spring and am trying to use the ReloadableResourceBundleMessageSource class.

I am trying to use it, so we no longer need to restart our web application to change / update property files.

I have a web application (primarily using JSF) and a separate tar component that contains all my property files.

The structure of tar properties is as follows:

 - CompanyOneMessages.properties
 - CompanyOneMessages_fr_FR.properties
 - CompanyTwoMessages.properties
 - CompanyTwoMessages_fr_FR.properties
 - CompanyThreeMessages.properties
 - CompanyThreeMessages_fr_FR.properties
 - ...

This tar is unpacked and deployed at the location on the server, which is specified as indicated in the class path in websphere configurations.

I added the following to my applicationContext-config.xml:

<!-- Enable reloading of resource bundles without requiring web-app restart -->
    <bean id="messages"
        class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
        <property name="basenames">
            <list>  
                <value>classpath:com/resource/dynamic/CompanyOneMessages</value>
                <value>classpath:com/resource/dynamic/CompanyTwoMessages</value>
                <value>classpath:com/resource/dynamic/CompanyThreeMessages</value>              
            </list>
        </property>     
        <property name="cacheSeconds" value="1" />
    </bean>

    <!-- Declare location of bean to handle messages and define property reference 
         we will use to reference message properties throughout the presentation layer -->
    <bean id="myappMessages" class="com.myapp.resource.MyAPPMessages">
        <property name="messages" ref="messages" />
    </bean>

It all works great.

, . , , applicationContext-config.xml / -.

tar .

ReloadableResourceBundleMessageSource , - ?

Update

, :

ApplicationContext-config.xml:

<bean id="messages" class="com.resource.MyAPPReloadableResourceBundleMessageSource">
</bean>

MyAPPReloadableResourceBundleMessageSource:

package com.myapp.resource;

import org.springframework.context.support.ReloadableResourceBundleMessageSource;

public class MyAPPReloadableResourceBundleMessageSource extends ReloadableResourceBundleMessageSource
{   
    public MyAPPReloadableResourceBundleMessageSource()
    {   
        getResourceBundlesMessages();

        // Simply single basename test
        setBasename("classpath:/resource/dynamic/companyOneMessages");      
    }

    @Override
    public void setBasename(String baesname)
    {
        System.out.println("In setBasename");
        super.setBasename(baesname);
    }

    @Override
    public void setBasenames(String[] baesnames)
    {
        System.out.println("In setBasenames");
        super.setBasenames(baesnames);
    }

    private String[] getResourceBundlesMessages()
    {
        String[] propertiesFiles = null;

        // How do I get all filenames with .properties under com.resources.dynamic? (location is under classpath)

        return propertiesFiles;
    }
}

, , , - classpath .properties?

+3
2

ReloadableResourceBundleMessageSource , webapp/, ( ).

+3

ReloadableResourceBundleMessageSource. @JamesC, API Spring ReloadableResourceBundleMessageSource:

, , - (, "WEB-INF" -).

, . ReloadableResourceBundleMessageSource calculateAllFilenames(String basename, Locale locale), , .

, /srv/myapp/messages ( , NOT classpath), - :

@Override
protected List<String> calculateAllFilenames(final String basename,
        final Locale locale) {

   return super.calculateAllFilenames("file:///srv/myapp/messages/" + basename, 
           locale);
}

basenames , , , calculateAllFilenames() .

Company calculateAllFilenames() , super.calculateAllFilenames() (.. super.calculateAllFilenames("file:///path/to/CompanyOneMessages", locale)). , - fooobar.com/questions/1583883/... . : , , . , , .

+2

Source: https://habr.com/ru/post/1583873/


All Articles