2012-02-15 19 views
9

Bunun muhtemelen aptalca bir soru olduğunu biliyorum, ama hayatım boyunca bunu anlayamıyorum. Temel olarak dataSource kullanıcı adı, parola ve sürücü sınıfı ismimi ayarlamak için maven kullanıyorum. Ben etkili pom.xml baktığımda Bir bahar veri kaynağı bildirirken bu bilgileri kullanmaya çalışıyorumMaven özelliklerini ilkbaharda geçirme

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

şöyle hepsi ince görünür. Kod aşağıdaki gibi görünür.

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

Sonra bir jdbcTemplate içine veri kaynağı geçmesine ama benim kodunda sql ifadeleri çalıştırmak için şablon kullandığımda adı $ {dataSource.driverClassName} ile hiçbir sürücü bulunabilir söyleyerek bir hata alıyorum. Açıkçası bu, dizge değişkeni değişkenden ziyade aktarıldığından. Neyi kaçırıyorum?

Teşekkür

+0

teşekkür ederiz. PropertyConfigurationPlaceholder, aradığım şey gibi görünüyor. –

cevap

2

Bahar bir .properties dosyasında bu değerleri bulmak için bekliyor.

Bir PropertyConfigurationPlaceholder'ı bu değerlerle enjekte edin ve Spring bunları bulacaktır. Aşağıdaki örnekte 3.8.2.1 için

http://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/beans/factory/config/PropertyPlaceholderConfigurer.html

Görünüş: maven derleme zamanında çalışır ve parametre çalışma zamanında değerlendirilen çünkü

http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/beans.html

2

Maven'in, uygulamanın herhangi bir veri transfer edilemez.

Ancak maven filtrelerini kullanabilirsiniz. Maven kaynakları işlerken bazı işaretleyicileri değerlerle birlikte alt öğe olarak ayırmak için.

+0

Bu cevaba katılıyorum. Maven filtrelemesini kullanmak, yay yapılandırma dosyalarındaki değerleri derleme zamanında günceller, böylece çalışma zamanında doğru değerlere sahip olur. Http://stackoverflow.com/questions/3886753/access-maven-project-version-in-spring-config-files sayfasına bakın. – Noremac

3

Sanırım bu şekilde yapamazsınız, peki, pom.xml'den yay uygulama içeriğine xml. mülkiyet dosyası yüklemek ve bahar applicationt bağlam dosyada özellikleri availables yapmak PropertyConfigurationPlaceholder kullanın Ardından

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

:

, bir özellik dosyasında gibi bir şey Mülklerinizi koyun.

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

Örneğin, (build etiketi içinde) sizin pom.xml'Bu tanımlamak gerekir:

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

6

iyi yolu Maven Kaynakları eklentisi yapılandırmaktır "**/* file_with_properties.xml", mülklerinizi kullandığınız dosyalardır (ör. $ {dataSource.username}).

yanı sıra, dışlamaları tanımlayabilirsiniz: tüm yardım için <excludes>**/*other_files.xml</excludes>