1

我正與一個由10多名Java開發人員組成的團隊一起工作在一個Web應用程序上。這是一個很大的項目(2歲),我們從昨晚開始討論一個問題:某些bean(2個bean)在使用時會導致NullPointerException(如果IoC不再工作)。Spring依賴注入停止工作

事情是,一切工作都很好,兩天前,我已經閱讀了這兩天的每一次提交,但Spring Confugration文件沒有變化。

我知道有時如果你通過Spring動態注入一個bean並通過新的操作數實例化它,它會給出一個NPE,但是在項目中沒有這個標誌。

所有的開發人員在他們的本地機器上都沒有這個問題,但是在CI服務器上,它工作正常,然後停止,直到我們重新啓動機器(而不是服務器)。有沒有人有一個想法如何處理這個問題?服務器啓動完全不顯示任何錯誤。

UPDATE:

  • 服務器上下文初始化表示絕對沒有錯誤(也沒有警告),併成功消息結束。

  • 我檢查了所有對bean setters的調用:沒有使用。

  • bean通過配置文件接收,不帶@Autowired。

  • 我已經爲新操作數搜索了整個項目,花了將近兩個小時來檢查每個操作數,但是沒有bean與新的操作數實例化。

+2

某處某些代碼將您的成員設置爲null(「它工作正常,然後停止。」)。你確定你沒有在代碼中的任何地方調用setX()嗎? –

+0

你能爲此添加一些細節嗎?堆棧跟蹤代碼片段或日誌如果您可以打開彈出調試日誌記錄 – mzzzzb

+0

增加日誌級別並向我們顯示一些相關的日誌和彈簧配置文件。檢查循環依賴。 –

回答

0

問題是由於JavaMelody和Spring AOP之間的衝突造成的。爲了解決這個問題,我們必須暫時停用JavaMelody,直到我們知道問題的根源。

從JavaMelody常見問題解答(詳細信息)

如果說,存在的所有功能於一身的監視spring.xml和AOP或@Autowired之間您的應用程序存在衝突,那麼你就可以使用monitoring-spring-datasource.xml文件,而不是monitoring-spring.xml。該文件僅包含數據源後處理器和SpringDataSourceFactoryBean的示例。

2

我的猜測是有人調用「new」來創建一個bean,這意味着它不再受Spring bean工廠的控制,但不知何故它依賴於DI。如果你使用註釋來連接資源,那更有可能。

你自己說的:多年來一直很好。春天沒有突然失敗。這10多個Java開發人員中有一個是新成員,或者他們認爲他們不瞭解Spring的可能性更大。