2012-02-15 13 views
9

Sé que esta es probablemente una pregunta tonta, pero no puedo entenderlo por mi vida. Básicamente estoy usando maven para establecer mi nombre de usuario, contraseña y nombre de clase de controlador de dataSource. Cuando miro en el pom.xml efectiva todo parece estar bien de la siguiente maneraPasando propiedades maven a la primavera

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

Estoy tratando de utilizar esta información cuando se declara una fuente de datos de primavera. El código aparece de la siguiente manera.

<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> 

luego de pasar la fuente de datos en un JdbcTemplate pero cuando se utiliza la plantilla para ejecutar sentencias SQL en mi código me sale un error que dice que ningún conductor con el nombre $ {} dataSource.driverClassName se puede encontrar. Esto es obviamente porque se está pasando la constante de cadena en lugar de la variable. ¿Qué me estoy perdiendo?

Gracias

+0

Gracias por toda la ayuda. Parece que PropertyConfigurationPlaceholder era lo que estaba buscando. –

Respuesta

2

Maven no pueda transferir los datos a la aplicación, porque experto trabaja en tiempo de compilación y el parámetro de un evaluada en tiempo de ejecución.

Pero puede usar filtros maven. Para sustituir algunos marcadores con valores mientras maven está procesando los recursos.

+0

Estoy de acuerdo con esta respuesta. El uso de filtros de maven actualiza los valores en los archivos de configuración de muelles en el momento de la construcción, teniendo así los valores correctos en tiempo de ejecución. Ver http://stackoverflow.com/questions/3886753/access-maven-project-version-in-spring-config-files – Noremac

3

Creo que no puede hacerlo de esa manera, quiero decir, desde pom.xml hasta el contexto de aplicación de primavera xml.

Ponga sus propiedades en un archivo de propiedades, algo así como:

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

A continuación, utilice PropertyConfigurationPlaceholder para cargar el archivo de propiedades y hacer que las propiedades disponibles en el archivo de contexto applicationt primavera.

6

La mejor forma de hacerlo es configurar el plugin de Maven Recursos:

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

Por ejemplo, se deben definir en su pom.xml (dentro de la etiqueta de compilación):

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

Dónde "**/* file_with_properties.xml" son sus archivos donde usa sus propiedades (es decir, $ {dataSource.username}).

Además, se pueden definir exclusiones: <excludes>**/*other_files.xml</excludes>

Cuestiones relacionadas