Das dynamische laden von Dateien auf den Klassenpfad ReloadableResourceBundleMessageSource

Ich bin neu auf den Frühling und bin versucht, es zu benutzen ist ReloadableResourceBundleMessageSource Klasse.

Ich bin versucht, es zu benutzen, so dass wir nicht mehr auf den Neustart unseres web-app für properties-Dateien änderungen/Aktualisierungen.

Habe ich eine web-app (in Erster Linie mit JSF) und eine separate tar-Komponente, die enthält alle meine Eigenschaften-Dateien.

Die Struktur der Eigenschaften, die tar ist wie folgt:

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

Dies ist tar entpackt und bereitgestellt, um einen Speicherort auf dem server, der angegeben ist, wie schon in den Klassenpfad innerhalb der websphere-Konfigurationen.

Ich habe Folgendes in meiner 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>

Diesem alles Prima funktioniert.

ABER, es nicht vollständig lösen das ursprüngliche problem.
Jede Zeit, die ich hinzufügen möchten Sie ein neues Unternehmen zu unserer Anwendung, werde ich haben, um eine neue Zeile in die applicationContext-config.xml Datei und strukturieren Sie/starten Sie den web-app.

Ich würde gerne in der Lage, ziehen Sie einfach die neue Gesellschaft properties-Datei in die Eigenschaften von Teer-und es werden dynamisch abgeholt.

Ist es möglich zu verlängern die ReloadableResourceBundleMessageSource Klasse in einer solchen Weise, dass es Suche den class-path für die Eigenschaften von Dateien auf Anwendung start-up und dynamisch laden, alle von Ihnen?

Update

Dies ist, was ich habe, so weit:

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

Also alles, was ich brauche, ist, wie man eine Liste aller Dateien im classpath .Eigenschaften-Erweiterung?

Dank

Thomas

InformationsquelleAutor Thomas Buckley | 2012-01-27

Schreibe einen Kommentar