2010-05-04 21 views
8

Şu düğümle bir ApplicationContext.xml dosyası var:İlkbaharda zorunlu olan özellik dosyalarındaki özellikleri nasıl yapabilirim?

<context:property-placeholder 
location="classpath:hibernate.properties, classpath:pathConfiguration.properties" /> 

Her iki properties dosyasının benim uygulamam tarafından kullanılacağını belirtir.

pathConfiguration.properties'in içinde, bazı yollar tanımlanır, örneğin:

PATH_ERROR=/xxx/yyy/error 
PATH_SUCCESS=/xxx/yyy/success 

A PathConfiguration çekirdeğinin her yol için ayarlayıcıları vardır.

Sorun şu: bu zorunlu yollardan bazıları tanımlanmadığında, hiçbir hata atılmıyor. Bu sorunu nasıl ve nerede ele almalıyım?

+0

Projenizde hangi Spring versiyonunu kullanıyorsunuz? Aşağıdaki bir yorumda biraz eski bir versiyona başvurmuştunuz. – stefanglase

+0

Evet, bahsetmeyi unuttum. İlkbahar 2.5 –

cevap

6

PropertyPlaceholder öğesinin, <context:property-placeholder ... /> aracılığıyla yapılandırılan standart davranışı, bir özelliği başka bir şekilde yapılandırdığınız sürece, bir yere gerek duyulmadığında çözülemediği zaman bir istisna atar.

Böyle bir özellik gerektiren bir Beaniniz varsa, sizin durumunuz için, değer çözülemediğinde başarısız olur. Böyle Örneğin:

public class PropertiesAwareBean { 

    @Value("${PATH_ERROR}") 
    private String errorPath; 

    String getErrorPath() { 
    return errorPath; 
    } 

} 

Eğer PropertyPlaceholder dinlenmek istiyorum ve bir özellik bu <context:property-placeholder ignore-unresolvable="true" ... /> gibi çözümlenemeyen özelliklerini görmezden PropertyPlaceholder yapılandırabilirsiniz çözülemeyen zaman bir özel durum atmak yapmazsanız.

0

Sorununuzu tam olarak anlayabildiğimden emin değilim, ancak buna yaklaşımın çeşitli yolları vardır. Bir tanesi kurucu enjeksiyonu kullanarak yolları zorunlu hale getirmek olacaktır. Kurucuda, gelen değerleri doğrulayabilir ve null ise, BeanInitializationException örneklerini atabilirsiniz.

+0

Sanırım problemi anladınız :-) Aslında Spring'e tamamen yeniyim ve kurucu enjeksiyonunun nasıl uygulanacağını anlayamıyorum. Ben bu konuda biraz okuyacağım ve bu çözüm ise +1 vermek için buraya döneceğim. (Eğer cevabınızı bir örnekle güncelleyebiliyorsanız, bu harika olurdu) –

+0

... çözümü burada buldum: http://static.springsource.org/spring/docs/2.0.3/reference/beans.html # fasulye-fabrika-özellikler-ayrıntılı (madde 3.5.1.2.1). Demek istediğin bu muydu? –

+0

Evet, düşündüğüm şey buydu. Benim bir örneğim yok. Ancak dikkat edilmesi gereken şey, kurucunun enjekte etmesinin yararının, gerekli parametrelerin geçtiğinden emin olmanızdır. Ancak, bunların doğru olduklarını garanti etmediğini unutmayın. Yine de, kurucudaki özellik değerlerini doğrulamak ve doğru değilse BeanInitializationException atmak isteyebilirsiniz. – drekka

1

Parametrelerin doğrulanmasını pekiştirmenin bir yolu, fasülyenizdeki dosyada klasik PropertyPlaceholderConfigurer fasulyeye geçiş yapmaktır.

PropertyPlaceholderConfigurer onun davranışını oynamak ve bazı temel eksik, bir özel durum ya da olmasın ya belirtmek için kullanabileceğiniz özelliklere sahiptir (setIgnoreUnresolvablePlaceholders veya setIgnoreResourceNotFound bakmak).

Doğru hatırlıyorsam, İlkbahar 2.5'de, yalnızca <context:property-placeholder> için konum özniteliği destekleniyor (bazı şeyler değişmiş olabilir).

+0

İlkbahar 2.5 için doğru bir 'konum' ve bir 'özellikler-ref 'özniteliği var. 3. bahar.0, cevabımda belirtildiği gibi, '-Tag üzerinde daha fazla yapılandırma olanağı sunuyor. – stefanglase

İlgili konular