SQL JDBCをクエリするのにSpring JDBCテンプレートを使用しています。Spring JDBCテンプレートでクエリを実行中に接続が閉じられたエラー
@Autowired
private JdbcTemplate jdbcTemplate;
public void importData(){
try{
logger.debug("Importing Data");
jdbcTemplate.query(...) // Fails
catch(DataAccessException e){
//Log the error
}
}
タスクが実行されたとき、私は以下の例外を取得しています(つまり、毎週1回):以下
org.springframework.jdbc.support.MetaDataAccessException: Error while extracting DatabaseMetaData; nested exception is java.sql.SQLException: Invalid state, the Connection object is closed.
at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:305)
at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:329)
at org.springframework.jdbc.support.SQLErrorCodesFactory.getErrorCodes(SQLErrorCodesFactory.java:214)
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.setDataSource(SQLErrorCodeSQLExceptionTranslator.java:134)
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.<init>(SQLErrorCodeSQLExceptionTranslator.java:97)
at org.springframework.jdbc.support.JdbcAccessor.getExceptionTranslator(JdbcAccessor.java:99)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:660)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:695)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:727)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:737)
at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:787)
私はスケジュールされたタスクが毎週1回実行するように構成されている、以下の実装ですドライバクラスです:
spring.datasource.driver-class-name=net.sourceforge.jtds.jdbc.Driver
私が推測すると、Spring(またはjdbcドライバ)は設定された時間の間アイドル状態であれば接続を閉じます。 'query'メソッドの実装を見ると、新しい接続を作成しないようです。この場合、別の方法(例:execute
)を使用する必要がありますか?
接続プールでこれを処理する必要があります。あなたは接続プールを持っていますよね? –
私はこのマニュアル(http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-sql.html#boot-features-connect)に従って、JettyでSpringブートを使用しています。プロダクションデータベース)は、光接続プールを使用する必要がありますか? –
あなたのクラスパスに光が含まれている場合のみ、私は信じています。それがデフォルトで何を使用しているかわかりません。 –