2017-08-20 1 views
0

Ich habe eine Spring-mvc-Anwendung entwickelt, in der ich einen Eigenschaftswert aus der Eigenschaftendatei im Weblogic-Server lesen möchte.MessageSource Methode getMessage funktioniert nicht im Frühjahr mvc

Haben folgende Schritte durchgeführt:

einen projektspezifischen Ordner appconfig in folgendem Pfad Erstellt: Oracle/Middleware/ORACLE_HOME/user_projects/domains/wl_server/config/rmsConfig

Platziert die Eigenschaften genannt commonConfig.properties in der es einreichen.

bearbeitet hat auch setDomainEnv.cmd mit folgendem Eintrag,

if NOT "%EXT_POST_CLASSPATH%"=="" (
    set EXT_POST_CLASSPATH=%EXT_POST_CLASSPATH%;%DOMAIN_HOME%\config\appConfig 
if NOT "%POST_CLASSPATH%"=="" (
    set POST_CLASSPATH=%POST_CLASSPATH%;%EXT_POST_CLASSPATH% 
) else (
    set POST_CLASSPATH=%EXT_POST_CLASSPATH% 
) 
) 

Bitte unten meiner Spring-Bean-Konfigurationsdatei für diese finden:

<?xml version="1.0" encoding="UTF-8"?> 
    <beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:util="http://www.springframework.org/schema/util" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd 
     http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.3.xsd"> 

<bean id="commonProps" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
     <property name="basename" value="commonConfig" /> 
     <property name="cacheSeconds" value="120" /> 
</bean> 
</beans> 

In meiner Java Spring-Bean-Klasse I dies bin beziehen wie folge :

  @Component 
     public class LocationClient{ 
      @Autowired 
      private MessageSource commonProps; 

      public void showMessage(){ 
      System.out.println(commonProps.getMessage("common.line", null, null, null)); 
      } 
     } 

Jetzt commonProps ist nicht null aber "common.line" Drucken null in der Konsole.

Finden Sie Immobilien Dateieintrag:

common.line=382 

Wer noch keine geeignete Lösung für dieses Problem hat ???

Antwort

0

Ich denke, Sie müssen Ihre Eigenschaft Datei in Classpath oder in WEB-INF Ordner hinzufügen.

Dies ist die Notiz aus den Java Spring-Dokumenten.

Für eine typische Web-Anwendung, Nachrichtendateien in WEB-INF gesetzt werden: z Ein "WEB-INF/messages" -Basisname würde eine "WEB-INF/messages.properties", "WEB-INF/messages_en.properties" usw. Anordnung sowie "WEB-INF/messages.xml", finden. WEB-INF/messages_de.xml "usw. Beachten Sie, dass Nachrichtendefinitionen in einem früheren Ressourcenbündel diejenigen in einem späteren Bündel außer Kraft setzen, aufgrund von sequentiellen Nachschlagen.

Siehe den Link für weitere Informationen: ReloadableResourceBundleMessageSource

0

Eine mögliche Lösung ist ResourceBundleMessageSource statt ReloadableResourceBundleMessageSource zu verwenden, um Ihre Eigenschaften wie folgt zu definieren:

<bean id="messageSource" 
class="org.springframework.context.support.ResourceBundleMessageSource"> 
     <property name="basename" value="commonConfig" /> 
    </bean> 

auch sicher, dass commonConfig.properties ist Wenn Ihre Anwendung beispielsweise appConfig ist, sollte sie sich im Stammverzeichnis Ihres Klassenpfads befinden: appConfig/WEB-INF/classes/commonConfig.properties

Zweite Alternative wenn Sie commonConfig.properties außerhalb Classpath, Ihre erste Ansatz (stellen Sie sicher, dass die bean id ist messageSource)

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
     <property name="basename" value="file:/your/absoulute/path/commonConfig" /> 
     <property name="cacheSeconds" value="120" /> 
</bean> 
+0

wird es keine Möglichkeit, die Eigenschaften innerhalb Anwendungsserver-Datei zu setzen? –

+0

innerhalb Anwendungsserver bedeutet, dass Sie die Eigenschaftendatei außerhalb Classpath benötigen? In diesem Fall können Sie mit 'ReloadableResourceBundleMessageSource' einen bestimmten Pfad definieren, unabhängig davon, ob der Pfad außerhalb des Klassenpfads liegt. Auf der anderen Seite erzwingt ResourceBundleMessageSource die Verwendung einer Klassenpfadressource. –