2012-02-15 25 views
9

So che questa è probabilmente una domanda stupida ma non riesco a capirlo per la vita di me. Fondamentalmente sto usando Maven per impostare il nome utente, la password e il nome della classe del driver DataSource. Quando mi guardo allo pom.xml efficace tutto sembra bene come seguePassare proprietà Maven alla primavera

<dataSource.driverClassName>oracle.jdbc.driver.OracleDriver</dataSource.driverClassName> 
<dataSource.username>someUsername</dataSource.username> 
<dataSource.password>somePassword</dataSource.password> 

Sto cercando di utilizzare queste informazioni quando si dichiara un DataSource di primavera. Il codice appare come segue.

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
    <property name="driverClassName" value="${dataSource.driverClassName}"/> 
    <property name="url" value="${dataSource.url}"/> 
    <property name="username" value="${dataSource.username}"/> 
    <property name="password" value="${dataSource.password}"/> 
</bean> 

Ho poi passare l'origine dati in un jdbcTemplate ma quando uso il modello per eseguire le istruzioni SQL nel mio codice ottengo un errore che dice che nessun driver con il nome $ {} dataSource.driverClassName può essere trovato. Questo ovviamente perché la costante di stringa viene passata piuttosto che la variabile. Cosa mi manca?

Grazie

+0

Grazie per tutto l'aiuto. Sembra che PropertyConfigurationPlaceholder sia quello che stavo cercando. –

risposta

2

Maven non può trasferire i dati all'applicazione, in quanto esperto di opere in fase di compilazione e il parametro di un valutato in fase di esecuzione.

Ma è possibile utilizzare i filtri Maven. Sostituire alcuni indicatori con valori mentre Maven sta elaborando le risorse.

+0

Sono d'accordo con questa risposta. Utilizzando il filtro maven si aggiornano i valori nei file di configurazione di primavera al momento della compilazione, con i valori corretti in fase di esecuzione. Vedi http://stackoverflow.com/questions/3886753/access-maven-project-version-in-spring-config-files – Noremac

3

Penso che non si possa fare in questo modo, voglio dire, da pom.xml a spring application context xml.

mettere la vostra proprietà in un file di proprietà, qualcosa di simile:

dataSource.username=${dataSource.username} 
dataSource.driverClassName=${dataSource.driverClassName} 
dataSource.username=${dataSource.username} 
dataSource.password=${dataSource.password} 

Quindi, utilizzare PropertyConfigurationPlaceholder per caricare il file di proprietà e fare proprietà disponibili sul file di contesto applicationt primavera.

6

Il modo migliore è quello di configurare il plugin Maven risorse:

http://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html

Ad esempio, è necessario definire in pom.xml (all'interno del tag build):

<resources> 
    <resource> 
     <directory>src/main/resources</directory> 
     <filtering>true</filtering> 
     <includes> 
      <include>**/*file_with_properties.xml</include> 
     </includes> 
    </resource> 
</resources> 

Dove "**/* file_with_properties.xml" sono i tuoi file in cui usi le tue proprietà (es. $ {dataSource.username}).

Inoltre, è possibile definire le esclusioni: <excludes>**/*other_files.xml</excludes>

Problemi correlati