我有一個spring應用程序,它從一個Kafka主題中消耗並在處理期間在Cassandra上運行一些實時查詢。該應用程序啓動正常,運行良好,但是當我關閉應用程序,這是當前正在處理的批次(批次卡夫卡)拋出Spring CassandraTemplate在關閉應用程序時拋出NoHostAvailableException
org.springframework.cassandra.support.exception.CassandraConnectionFailureException: 所有主機(S )嘗試查詢失敗(未嘗試主機);嵌套0例外是 com.datastax.driver.core.exceptions.NoHostAvailableException:所有 主機(S)試了查詢失敗(無主機受審)
從stack-trace,流媒體查詢我運行卡桑德拉未能在
org.springframework.data.cassandra.core.CassandraTemplate $ ResultSetIteratorAdapter.hasNext(CassandraTemplate.java:1218)
扔個e以上例外
編輯
所以它的彈簧引導應用與執行器。我使用執行器的關閉端點關閉應用程序。我正在使用Spring Cassandra存儲庫與我的數據庫進行交互。我沒有明確關閉任何連接。
流傳輸讀取期間發生錯誤。當我點擊/關閉端點時,10次中有9次正在執行,並且失敗。 JPA和mongo能夠優雅地關閉。
int[] fareTrend = fareInfoRepository.findByOriginAndDestinationAndEventTimeAfter(originCode, destinationCode,
Instant.now().minusSeconds(FARE_TREND_THRESHOLD_SECONDS))
.filter(fareInfo -> departureRange.contains(fareInfo.getDepartureDate()))
.filter(fareInfo -> "e".equals(fareInfo.getFareDetails().getCabinClass()))
.sorted(Comparator.comparing(FareInfo::getEventTime))
.mapToInt(FareInfo::getTotalFare).toArray();
存儲庫:
@Repository
public interface FareInfoRepository extends CassandraRepository<FareInfo> {
Stream<FareInfo> findByAdvancePurchaseDays(short advancepurchasedays);
Stream<FareInfo> findByOriginAndDestinationAndEventTimeAfter(String origin, String destination, Instant eventTimeLimit);
}
主類:
@ComponentScan("com.ixigo.analytics")
@EntityScan("com.ixigo.analytics.common.jpa.models")
@EnableJpaRepositories("com.ixigo.analytics.common.jpa.repos")
@EnableCassandraRepositories("com.ixigo.analytics.common.cassandra.repos")
@SpringBootApplication(exclude = MongoDataAutoConfiguration.class)
public class DispatcherMain {
public static void main(String[] args) {
SpringApplication.run(DispatcherMain.class, args);
}
}
卡桑德拉configuration。
你能提供這個代碼片段嗎?你是如何關閉連接的?停止前沖洗了嗎? –