die Antwort gefunden!
Per den javadocs für ReloadableResouceBundleMessageSource
Frühling spezifische Message Implementierung, die Ressourcenbündel mit bestimmten Basisnamen zugreift, im Frühjahr Applicationressourcenbelastung teilnehmen. Im Gegensatz zur JDK-basierten ResourceBundleMessageSource verwendet diese Klasse Eigenschaftsinstanzen als benutzerdefinierte Datenstruktur für Nachrichten und lädt sie über eine PropertiesPersister-Strategie aus Spring Resource-Handles. Diese Strategie ist nicht nur in der Lage, Dateien basierend auf Zeitstempeländerungen neu zu laden, sondern auch Eigenschaftendateien mit einer bestimmten Zeichencodierung zu laden. Es wird auch XML-Eigenschaftendateien erkennen.
Beachten Sie, dass die als "basennames" -Eigenschaft festgelegten Basisnamen in einer etwas anderen Weise behandelt werden als die Eigenschaft "basenames" von ResourceBundleMessageSource. Es folgt der grundlegenden ResourceBundle-Regel, Dateierweiterungen oder Sprachcodes nicht anzugeben, kann sich jedoch auf jeden Spring-Ressourcenspeicherort beziehen (statt auf Klassenpfadressourcen beschränkt zu sein). Mit einem Präfix "classpath:" können weiterhin Ressourcen aus dem Klassenpfad geladen werden, aber "cacheSeconds" -Werte, die nicht "-1" sind (Caching für immer), funktionieren in diesem Fall möglicherweise nicht zuverlässig.
Für eine typische Webanwendung könnten Nachrichtendateien in WEB-INF platziert werden: z. ein "WEB-INF/messages" Basisname würde eine "WEB-INF/messages.properties", "WEB-INF/messages_de.properties" usw. Anordnung sowie "WEB-INF/messages.xml", "WEB-INF /messages_en.xml "usw. Beachten Sie, dass Nachrichtendefinitionen in einem vorherigen Ressourcenpaket die eines späteren Pakets aufgrund sequenzieller Suche überschreiben.
Diese MessageSource kann einfach außerhalb eines ApplicationContext verwendet werden: Sie verwendet standardmäßig einen DefaultResourceLoader, der einfach mit dem Resource Loader des ApplicationContext überschrieben wird, wenn er in einem Kontext ausgeführt wird. Es hat keine anderen spezifischen Abhängigkeiten.
so ist die Lösung, den Pfad bereitzustellen.
von
@Bean
public MessageSource messageSource()
{
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("messages");
messageSource.setFallbackToSystemLocale(false);
messageSource.setCacheSeconds(0);
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
zu includeing den Pfad auf setBasename()
@Bean
public MessageSource messageSource()
{
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasename("classpath:messages");
messageSource.setFallbackToSystemLocale(false);
messageSource.setCacheSeconds(0);
messageSource.setDefaultEncoding("UTF-8");
return messageSource;
}
Kann das Problem mit XML-basierter Konfiguration zu reproduzieren. Beispielanwendung verfügbar auf [Github] (https://github.com/manish-in-java/stackoverflow-questions/tree/master/36816274). Etwas scheint mit der Java-basierten Konfiguration nicht zu funktionieren. Es gibt [andere Beispiele] (https: //samerabdelkafi.wordpress.com/2014/08/03/spring-mvc-full-java-based-config /) mit Java-Konfiguration, die 'ReloadableResourceBundleMessageSource' erfolgreich verwendet. – manish
Interessant ... Ich sehe, wo Sie Thymeleaf verwenden, aber das Beispiel, das Sie verknüpften, ist nicht. Beide verwenden jedoch Spring Boot nicht. Ich unter, wenn das ist, wo das Problem ist. – ndrone
Es könnte sich lohnen, ein Problem im Spring Github Repo zu stellen. – manish