2012-01-26 29 views
9

Tôi có một ứng dụng web có tệp cấu hình mùa xuân. Tôi có các mục sau đây:Spring không hủy bỏ bootstrapping trên khởi tạo bean Lỗi khi quét thành phần được bật?

<bean id="flyway" class="xxx.FlywayTool" init-method="migrateOrFail"/> 

Các "đường bay" đậu được sử dụng để khởi tạo và di chuyển database.Now Tôi có một đậu xác định nguồn dữ liệu ứng dụng nên sử dụng:

<bean id="dataSource" class="..." depends-on="flyway"> 

một điều này phụ thuộc trên đường bay để thành công.

Mọi thứ đều hoạt động tốt. Bây giờ, khi "đường bay" đậu ném một ngoại lệ bootstrapping của các điểm dừng mùa xuân và khởi động webapp được hoàn thành - tất cả đều tốt.

Bây giờ tôi đang bắt đầu để cho phép autowiring cho các thành phần nhất định thông qua:

<context:component-scan base-package="de.xxxxx.xxxxx" /> 

trong một số các lớp tôi phụ thuộc vào dịch vụ mà còn được định nghĩa là đậu trong cấu hình xml. và họ tôi phụ thuộc vào nguồn dữ liệu được đề cập ở trên.

bây giờ vấn đề: ngay sau khi tôi bootstrap ứng dụng bây giờ và "đường bay" được ném một ngoại lệ của ngoại lệ được nuốt vào mùa xuân trong phần sau:

org.springframework.beans.factory.support. AbstractBeanFactory.getTypeForFactoryBean (string, RootBeanDefinition)

catch (BeanCreationException ex) { 
    // Can only happen when getting a FactoryBean. 
    if (logger.isDebugEnabled()) { 
     logger.debug("Ignoring bean creation exception on FactoryBean type check: " + ex); 
    } 
    onSuppressedException(ex); 
    return null; 
} 

và bây giờ mùa xuân cố gắng, cho mọi dịch vụ dependend khác (mà phụ thuộc vào nguồn dữ liệu và do đó đường bay) khởi tạo tất cả các hạt cà phê mà trong kết quả lần lượt trong các thủ tục tương tự một lần nữa và lần nữa.

Vòng lặp đặc biệt này tiếp tục cho đến khi mùa xuân kết thúc, cố gắng thấm nhuần mọi phụ thuộc có thể thay vì hủy bỏ sau lỗi đường bay đầu tiên.

hành vi kỳ lạ này chỉ bắt đầu khi tôi bật tính năng quét phần qua

<context:component-scan .... 

khi tính năng này bị vô hiệu mùa xuân dừng lại sau khi lỗi đường bay đầu tiên happend. Nó cũng kết thúc trong một lớp khác:

org.springframework.context.support.AbstractApplicationContext.refresh()

 catch (BeansException ex) { 
      // Destroy already created singletons to avoid dangling resources. 
      destroyBeans(); 

      // Reset 'active' flag. 
      cancelRefresh(ex); 

      // Propagate exception to caller. 
      throw ex; 
     } 

vì vậy đây là hành vi tôi mong chờ trong trường hợp khác nữa.

phiên bản mùa xuân của chúng tôi: 3.0.6.RELEASE

hành vi này cũng có mặt với các lớp khác ném bất kỳ execption runtime (không chỉ là đường bay) này là một lỗi hoặc hành vi mong đợi?

bất kỳ sự giúp đỡ đánh giá cao

marcel

+7

Bạn đã thử đặt '

+0

wow, điều đó dường như hoạt động. bạn nghĩ tôi nên mở một lỗi? hoặc là hành vi dự định này? – Marcel

+0

Đây là một hành vi dự định, vì sử dụng tính năng này, bạn có thể ghi đè cấu hình điều khiển chú thích bằng cấu hình XML của mình. –

Trả lời

1

Đặt <context:component-scan... sau khi tuyên bố đậu của bạn trong tập tin XML của bạn như nico_ekito nói trong ý kiến.

Xác nhận để làm việc:

Marcel: wow, điều đó dường như làm việc. bạn nghĩ tôi nên mở một lỗi? hoặc là hành vi dự định này?

Các vấn đề liên quan