Pas de fichier de propriétés trouvé d'Erreur pour ReloadableResourceBundleMessageSource
Je suis en train d'utiliser un rechargeable printemps regroupement de ressources mais le printemps ne peut pas trouver le fichier. J'ai essayé des tonnes de différents chemins, mais ne peut pas le faire fonctionner n'importe où. Dans le code ci-dessous, vous verrez que je charge à la fois le printemps bundle et la régulière à partir de la même variable de chemin d'accès, mais un seul fonctionne.
J'ai été frapper ma tête contre ce depuis bien trop longtemps. Quelqu'un a des idées?
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"));
}
}
Vous devez vous connecter pour publier un commentaire.
Juste pour l'enregistrement, vous pouvez essayer cette approche:
Explication:
Printemps rechargeable message bundle ne pas utiliser le chemin de classe comme elle est mise en cache par application des serveurs. Vous pouvez contourner cela en classpath:votre.properies mais puis à nouveau, vous pouvez aussi bien utiliser le non rechargeable version qui est un peu de tiques plus rapide.
En d'autres termes, l'astuce est d'utiliser la webApp répertoire qui n'est pas mise en cache. Vous pouvez placer vos fichiers en vertu de votreprojet/web ou n'importe où en dessous aussi longtemps que vous laissez le chargeur de savoir.
de le placer dans webapp-config.xml
et c'est votre bean:
Et depuis JSF2 est vraiment des trucs cool que vous pouvez utiliser dans un visages contexte:
Vous pouvez spécifier les propriétés de fichier(s) d'être à l'extérieur de l'archive par la configuration dans le contexte de l'application fichier comme ceci:
<property name="basenames"> <list> <value>${cms.catalog.url}/highschool/customer/messages</value> </list> </property> <property name="cacheSeconds" value="${cms.catalog.cache.seconds}" />
travaillé aussi bien en tant que:<property name="basename" value="${cms.catalog.url}/highschool/customer/messages" /> <property name="cacheSeconds" value="${cms.catalog.cache.seconds}" />
Avec
ReloadableResourceBundleMessageSource
vous devez déplacer les fichiers de messages de le classpath si vous voulez réellement être rechargeable. Si vous n'avez pas de soins pour l'rechargeable fonctionnalité, vous pouvez le mettre dans le classpath et l'utilisation de laclasspath:
préfixe.Je viens de passer à
ReloadableResourceBundleMessageSource
. C'est de travailler pour moi.plutôt que de lire à partir d'un fichier, vous devriez probablement lire depuis le classpath à l'aide de