2009-08-21 22 views
12

Ho bisogno di caricare alcune proprietà in un contesto Spring da una posizione che non conosco fino all'esecuzione del programma.posizione segnaposto di proprietà da un'altra proprietà

così ho pensato che se avessi un PropertyPlaceholderConfigurer senza posizioni sarebbe leggere my.location dalle proprietà di sistema e quindi ho potuto usare quella posizione in un contesto: struttura a segnaposto

Ti piace questa

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>  
<context:property-placeholder location="${my.location}"/> 

ma questo non funziona e non fa location="classpath:${my.location}"

Paul

+0

Non sarete in grado di combinare due segnaposti come quello: sono BeanFactoryPostProcessors, che non possono elaborarsi a vicenda, se vedete cosa intendo. – skaffman

+0

sì, ho pensato che il mio problema fosse qualcosa di simile –

+0

In realtà, questo odora di un miglioramento di PropertyPlaceHolderConfigurer che potrebbe valere la pena di essere archiviato come richiesta di funzionalità in Spring JIRA. – skaffman

risposta

5

Il problema qui è che stai cercando di configurare un segnaposto di proprietà usando la sintassi del segnaposto di proprietà :) È un po 'una situazione di pollo e uova - primavera non può risolvere il tuo segnaposto ${my.location} finché non viene configurato il segnaposto di proprietà.

Questo non è soddisfacente, ma si potrebbe bodge esso utilizzando la sintassi più esplicito:

<bean class="org.springframework.beans.factory.config.PropertyPlaceHolderConfigurer"> 
    <property name="location"> 
     <bean class="java.lang.System" factory-method="getenv"> 
     <constructor-arg value="my.location"/> 
     </bean> 
    </property> 
</bean> 
+0

non soddisfacente, ma almeno potrebbe funzionare –

+0

Non funziona per me utilizzando Spring 3.1.3: 'org.springframework.beans.NotWritablePropertyException: 'location' proprietà non valida della classe bean [org.springframework.beans.factory.config .PropertyPlaceholderConfigurer]: la 'posizione' della proprietà Bean non è scrivibile o ha un metodo setter non valido. Il tipo di parametro del setter corrisponde al tipo restituito del getter? ' –

15

È possibile farlo con un approccio leggermente diverso. Ecco come lo configuriamo. Carico le proprietà predefinite e quindi le sovrascrivo con le proprietà da un percorso configurabile. Questo funziona molto bene per me.

+0

+1 - L'ho fatto. Funziona bene. –

Problemi correlati