Keine properties-Datei gefunden Fehler für ReloadableResourceBundleMessageSource
Ich versuche, eine wiederaufladbare Frühjahr Ressource-bundle, aber der Frühling die Datei nicht finden kann. Ich habe versucht, Tonnen von verschiedenen wegen, aber kann es nicht erhalten, von überall aus arbeiten. Im code unten sehen Sie, dass ich laden Sie beide die Feder bündeln und die regelmäßig von der gleichen Pfad-variable, aber nur eine funktioniert.
Ich habe schlug meinen Kopf gegen das viel zu lange. Wer noch Ideen?
logfile
INFO 2010-04-28 11:38:31,805 [main] org.myorg.test.TestMessages: C:\www\htdocs\messages.properties
INFO 2010-04-28 11:38:31,805 [main] org.myorg.data.Messages: initializing Spring Message Source to C:\www\htdocs\messages.properties
INFO 2010-04-28 11:38:31,821 [main] org.myorg.data.Messages: Attempting to load properties from C:\www\htdocs\messages.properties
DEBUG 2010-04-28 11:38:31,836 [main] org.springframework.context.support.ReloadableResourceBundleMessageSource: No properties file found for [C:\www\htdocs\messages.properties_en_US] - neither plain properties nor XML
DEBUG 2010-04-28 11:38:31,842 [main] org.springframework.context.support.ReloadableResourceBundleMessageSource: No properties file found for [C:\www\htdocs\messages.properties_en] - neither plain properties nor XML
DEBUG 2010-04-28 11:38:31,848 [main] org.springframework.context.support.ReloadableResourceBundleMessageSource: No properties file found for [C:\www\htdocs\messages.properties] - neither plain properties nor XML
INFO 2010-04-28 11:38:31,848 [main] org.myorg.test.TestMessages: I am C:\www\htdocs\messages.properties
Messages.java
package org.myorg.data;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.support.ReloadableResourceBundleMessageSource;
public class Messages {
protected static final Log logger = LogFactory.getLog(Messages.class);
private static ReloadableResourceBundleMessageSource msgSource = null;
private static ResourceBundle RESOURCE_BUNDLE;
public static final String PATH = "C:" + File.separator + "www"
+ File.separator + "htdocs" + File.separator + "messages.properties";
private Messages() {
}
public static String getString(String key) {
initBundle();
return msgSource.getMessage(key, null,
RESOURCE_BUNDLE.getString(key), null);
}
private static void initBundle(){
if(null == msgSource || null == RESOURCE_BUNDLE){
logger.info("initializing Spring Message Source to " + PATH);
msgSource = new ReloadableResourceBundleMessageSource();
msgSource.setBasename(PATH);
msgSource.setCacheSeconds(1);
FileInputStream fis = null;
try {
logger.info("Attempting to load properties from " + PATH);
fis = new FileInputStream(PATH);
RESOURCE_BUNDLE = new PropertyResourceBundle(fis);
} catch (Exception e) {
logger.info("couldn't find " + PATH);
} finally {
try {
if(null != fis)
fis.close();
} catch (IOException e) {
}
}
}
}
}
TestMessages.java
package org.myorg.test;
import org.myorg.data.Messages;
public class TestMessages extends AbstractTest {
public void testMessage(){
logger.info(Messages.PATH);
logger.info(Messages.getString("OpenKey.TEST"));
}
}
InformationsquelleAutor samspot | 2010-04-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur für das Protokoll können Sie versuchen, diesen Ansatz:
Erklärung:
Frühjahr wiederaufladbar message bundle nicht mit der Klasse Weg, wie es bekommen ' s Cache von app-Servern. Sie können dies umgehen, indem classpath:Ihre.properies, aber dann wieder Sie können auch mit den nicht wiederaufladbaren version, die ist ein paar ticks schneller.
In anderen Worten, der trick ist, verwenden Sie die webApp-Verzeichnis, die nicht zwischengespeichert werden. Sie können Ihre Dateien unter yourProject/web oder irgendwo unten, solange du den Bootloader wissen.
legen Sie diese in webapp-config.xml
das ist deine Bohne:
Und seit JSF2 ist wirklich coolen Sachen, die Sie verwenden möchten, können diese in einer Gesichter Kontext dann:
Für diejenigen, die sich mit diesem Beispiel, ich mag, dass Sie legte es, aber ich würde es befürworten die cacheSeconds=1 möglicherweise zu Häufig für eine multi-server-Produktionsumgebung zugreifen auf dasselbe freigegebene Ressource. Verwenden Sie, was ist angemessen für Ihren Bedarf.
InformationsquelleAutor Steven Varga
Können Sie die Eigenschaften der Datei(en) werden außerhalb des Archivs, durch die Konfiguration in der Anwendung Kontext-Datei wie folgt:
Wir haben mit dem Basisnamen mit einem substituierten file:// Ausdruck, da 2012. Ich experimentierte gerade jetzt mit Basisnamen auf - die-Liste-Ansatz - und das funktioniert ausreichend als gut. Das sind Eigenschaften, die in der Bohne:
<property name="basenames"> <list> <value>${cms.catalog.url}/highschool/customer/messages</value> </list> </property> <property name="cacheSeconds" value="${cms.catalog.cache.seconds}" />
arbeitete genauso gut wie:<property name="basename" value="${cms.catalog.url}/highschool/customer/messages" /> <property name="cacheSeconds" value="${cms.catalog.cache.seconds}" />
InformationsquelleAutor Tommy Stephenson
Mit
ReloadableResourceBundleMessageSource
haben Sie die Nachricht verschieben von Dateien aus dem classpath, wenn Sie wollen, um tatsächlich wiederaufladbar. Wenn Sie kümmern sich nicht für die aufladbare Funktion können Sie setzen Sie Sie in den classpath und verwenden Sie dieclasspath:
Präfix.Ich nur wechseln
ReloadableResourceBundleMessageSource
. Das ist für mich arbeiten.InformationsquelleAutor MikeNereson
eher als das Lesen von einer Datei, aber Sie sollten wahrscheinlich Lesen Sie aus dem classpath verwenden
hi sampot, könnte man dies mit "Datei:"?
InformationsquelleAutor MeBigFatGuy