Charger dynamiquement des fichiers sur le chemin de classe à l'aide de ReloadableResourceBundleMessageSource

Je suis nouveau sur le Printemps et je suis d'essayer de l'utiliser de ReloadableResourceBundleMessageSource classe.

Je suis d'essayer de l'utiliser de sorte que nous n'avons plus à redémarrer notre application web pour les fichiers de propriétés de changements/mises à jour.

J'ai une application web (en utilisant Principalement JSF) et un autre, de goudron composant qui contient tous mes fichiers de propriétés.

La structure des propriétés de goudron est comme suit:

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

Ce goudron est décompressé et déployé à un emplacement sur le serveur qui est spécifié comme été sur le chemin de la classe dans websphere configurations.

J'ai ajouté ce qui suit à mon 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>

Tout cela fonctionne très bien.

MAIS, il n'est pas entièrement résoudre le problème d'origine.
Toutes les fois que je veux ajouter une nouvelle société pour notre application, je vais devoir ajouter une nouvelle ligne à la applicationContext-config.xml fichier et de les redéployer/redémarrage de l'application web.

Je voudrais être en mesure de simplement placer la nouvelle société des propriétés de fichier dans les propriétés de goudron et pour qu'il soit dynamiquement ramassé.

Est-il possible de prolonger la ReloadableResourceBundleMessageSource classe de telle manière qu'il va chercher le chemin de classe pour les propriétés des fichiers sur l'application de démarrage et de charge dynamique de tous?

Mise à jour

C'est ce que j'ai à ce jour:

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;
    }
}

Donc tout ce que je besoin est de savoir comment obtenir une liste de tous les fichiers dans le classpath .extension de propriétés?

Grâce

Thomas

OriginalL'auteur Thomas Buckley | 2012-01-27