試圖從春天啓動ApplicationRunner調用RxJava2,我得到一個非常神祕的例外:春天引導和RxJava2集成 - NullPointerException異常:其實不
java.lang.IllegalStateException: Failed to execute ApplicationRunner
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:770)
at org.springframework.boot.SpringApplication.callRunners(SpringApplication.java:757)
at org.springframework.boot.SpringApplication.afterRefresh(SpringApplication.java:747)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:134)
at com.silanis.ps.dtool.Application.main(Application.java:37)
Caused by: java.lang.NullPointerException: Actually not, but can't throw other exceptions due to RS
at io.reactivex.Flowable.subscribe(Flowable.java:12995)
at io.reactivex.Flowable.subscribe(Flowable.java:12932)
at io.reactivex.internal.operators.flowable.FlowableZip$ZipCoordinator.subscribe(FlowableZip.java:127)
at io.reactivex.internal.operators.flowable.FlowableZip.subscribeActual(FlowableZip.java:79)
at io.reactivex.Flowable.subscribe(Flowable.java:12986)
at io.reactivex.internal.operators.flowable.FlowableDoOnEach.subscribeActual(FlowableDoOnEach.java:49)
at io.reactivex.Flowable.subscribe(Flowable.java:12986)
at io.reactivex.internal.operators.flowable.FlowableTake.subscribeActual(FlowableTake.java:32)
at io.reactivex.Flowable.subscribe(Flowable.java:12986)
at io.reactivex.internal.operators.flowable.FlowableDoOnEach.subscribeActual(FlowableDoOnEach.java:49)
at io.reactivex.Flowable.subscribe(Flowable.java:12986)
at io.reactivex.internal.operators.flowable.FlowableFlatMapSingle.subscribeActual(FlowableFlatMapSingle.java:54)
at io.reactivex.Flowable.subscribe(Flowable.java:12986)
at io.reactivex.Flowable.subscribe(Flowable.java:12935)
at com.silanis.ps.dtool.services.CliRunner.run(CliRunner.java:61)
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:767)
... 5 common frames omitted
Caused by: java.lang.IllegalArgumentException: null
at java.util.concurrent.ScheduledThreadPoolExecutor.scheduleAtFixedRate(ScheduledThreadPoolExecutor.java:565)
at io.reactivex.internal.schedulers.NewThreadWorker.schedulePeriodicallyDirect(NewThreadWorker.java:91)
at io.reactivex.internal.schedulers.ComputationScheduler.schedulePeriodicallyDirect(ComputationScheduler.java:139)
at io.reactivex.internal.operators.flowable.FlowableInterval.subscribeActual(FlowableInterval.java:46)
at io.reactivex.Flowable.subscribe(Flowable.java:12986)
... 20 common frames omitted
是什麼java.lang.NullPointerException: Actually not, but can't throw other exceptions due to RS
實際上意味着什麼呢?有
事做
Caused by: java.lang.IllegalArgumentException: null
at java.util.concurrent.ScheduledThreadPoolExecutor.scheduleAtFixedRate(ScheduledThreadPoolExecutor.java:565)
at io.reactivex.internal.schedulers.NewThreadWorker.schedulePeriodicallyDirect(NewThreadWorker.java:91)
答:
正如在這個問題上的意見mentionned,當Flowable.interval
用的0
值初始化拋出此錯誤。將該值設置爲正值解決了問題。
這是我最喜歡的錯誤消息之一:)它表示提示調查的操作員中的錯誤。事實上,正如@Kiskae所說的,不積極的時期不會被處理(或不被允許)。理論上,它可能表明立即重新安排,但通常這種非常高的頻率執行不是開發人員想要的。如果你能弄清楚爲什麼你有一個零或更少的時間,這將是非常好的。 – akarnokd
@akarnokd我會繼續調查......這可能與'ApplicationRunner'' run'方法在與rxjava代碼不同的某個線程中執行的事實有關嗎?我過於簡單的測試似乎表明run方法比rxjava代碼更快完成,並且很可能Spring Boot關閉了jvm。這是否會導致這種異常發生?如果是這樣,我將需要看看如何用rxjava'observeOn'或'subscribeOn'來鉤住Spring線程(我還不太熟悉如何使用這些...)。感謝您的幫助,並讓我知道您的想法。 – simon
我懷疑Spring使用Flowable.interval來處理任何事情,所以應該在代碼中有一些以0或負數結束的事情,或許是依賴注入缺失的缺失或錯誤配置。 – akarnokd