をしない私はSpring data
リポジトリがあります。春リポジトリ方式が近いJDBC接続
@Repository
interface SomeRepository extends CrudRepository<Entity, Long> {
Stream<Entity> streamBySmth(String userId);
}
を私はいくつかのSpring Beanにそのメソッドを呼び出しています:
@Scheduled(fixedRate = 10000)
private void someMethod(){
someRepository.streamBySmth("smth").forEach(this::callSomeMethod);
}
私はMySQLデータベースを使用します。
に思えo.h.engine.jdbc.spi.SqlExceptionHelper : SQL Error: 0, SQLState: 08001
o.h.engine.jdbc.spi.SqlExceptionHelper : Could not create connection to database server.
o.s.s.s.TaskUtils$LoggingErrorHandler : Unexpected error occurred in scheduled task.
org.springframework.dao.DataAccessResourceFailureException: Unable to acquire JDBC Connection; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection
、その接続は春で適切に閉じられていませんでした:私はいくつかの成功メソッド呼び出しの後にアプリケーションを実行していたときに、それが例外をスローします。メソッドの戻り値をList
からStream
に変更した場合、正しく動作します。
UPDATE: 春ブートバージョンreference documentation clearly states、Stream
sが試し-と、リソースブロックと一緒に使用する必要があるとして1.4.1.RELEASE
ストリームで 'close'を呼び出そうとしましたか? – marstran
私は試しましたが、それは助けられませんでした。それにもかかわらず、 'Stream'を手動で閉じるのは正しい動作ではありません。 –
私はリポジトリから 'Stream'を返すことに慣れていませんが、' Stream'は遅延しています。 'Stream'は' AutoClosable'でもあるので、try-with-resources節でそれを使うことができます。 – marstran