2016-09-23 12 views
0

以下に示すように定義されたjdbcインバウンド・チャネル・アダプターがあります。私はMySQLのdataSourceを使用しています。ポーリングされた行のステータスを更新したいと思います。私はこの文書に従おうとしています:spring integration ref. mannual。私の理解は、:idはSELECTクエリによって返されたすべてのidのセットにマップされるべきです。Spring統合InSerializableException jdbcインバウンド・チャネル・アダプター更新照会の場合

<int-jdbc:inbound-channel-adapter 
    channel="targetChannel" data-source="dataSource" 
    query="SELECT * FROM mytable WHERE status=''" row-mapper="myRowMapper" 
    max-rows-per-poll="500" 
    update="UPDATE mytable SET status='IN_PROGRESS' WHERE id in (:id)"> 
    <int:poller fixed-delay="60000" /> 
</int-jdbc:inbound-channel-adapter> 

SELECTクエリが細かい実行され、私は予想通り、すべての結果の行はRowMapperのでマッピングされていることを保証している、しかし、それは与えられたUPDATEクエリを使用して更新しようとしている間、私は次の例外を取得:

2016-09-23 14:57:29.361 ERROR 15580 --- [task-scheduler-1] o.s.integration.handler.LoggingHandler : org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL [UPDATE mytable SET status='IN_PROGRESS' WHERE id in (?)]; Invalid argument value: java.io.NotSerializableException; nested exception is java.sql.SQLException: Invalid argument value: java.io.NotSerializableException 
at org.springframework.jdbc.support.SQLStateSQLExceptionTranslator.doTranslate(SQLStateSQLExceptionTranslator.java:108) 
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:73) 
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) 
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:81) 
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:649) 
at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:870) 
at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:894) 
at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.update(NamedParameterJdbcTemplate.java:287) 
at org.springframework.integration.jdbc.JdbcPollingChannelAdapter.executeUpdateQuery(JdbcPollingChannelAdapter.java:181) 
at org.springframework.integration.jdbc.JdbcPollingChannelAdapter.poll(JdbcPollingChannelAdapter.java:173) 
at org.springframework.integration.jdbc.JdbcPollingChannelAdapter.receive(JdbcPollingChannelAdapter.java:149) 
at org.springframework.integration.endpoint.SourcePollingChannelAdapter.receiveMessage(SourcePollingChannelAdapter.java:209) 
at org.springframework.integration.endpoint.AbstractPollingEndpoint.doPoll(AbstractPollingEndpoint.java:245) 
at org.springframework.integration.endpoint.AbstractPollingEndpoint.access$000(AbstractPollingEndpoint.java:58) 
at org.springframework.integration.endpoint.AbstractPollingEndpoint$1.call(AbstractPollingEndpoint.java:190) 
at org.springframework.integration.endpoint.AbstractPollingEndpoint$1.call(AbstractPollingEndpoint.java:186) 
at org.springframework.integration.endpoint.AbstractPollingEndpoint$Poller$1.run(AbstractPollingEndpoint.java:353) 
at org.springframework.integration.util.ErrorHandlingTaskExecutor$1.run(ErrorHandlingTaskExecutor.java:55) 
at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50) 
at org.springframework.integration.util.ErrorHandlingTaskExecutor.execute(ErrorHandlingTaskExecutor.java:51) 
at org.springframework.integration.endpoint.AbstractPollingEndpoint$Poller.run(AbstractPollingEndpoint.java:344) 
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54) 
at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:81) 
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) 
at java.util.concurrent.FutureTask.run(Unknown Source) 
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(Unknown Source) 
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 
Caused by: java.sql.SQLException: Invalid argument value: java.io.NotSerializableException 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:963) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:896) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:885) 
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:860) 
at com.mysql.jdbc.PreparedStatement.setSerializableObject(PreparedStatement.java:3829) 
at com.mysql.jdbc.PreparedStatement.setObject(PreparedStatement.java:3559) 
at com.mysql.jdbc.JDBC42PreparedStatement.setObject(JDBC42PreparedStatement.java:68) 
at org.springframework.jdbc.core.StatementCreatorUtils.setValue(StatementCreatorUtils.java:440) 
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUtils.java:235) 
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValue(StatementCreatorUtils.java:150) 
at org.springframework.jdbc.core.PreparedStatementCreatorFactory$PreparedStatementCreatorImpl.setValues(PreparedStatementCreatorFactory.java:292) 
at org.springframework.jdbc.core.PreparedStatementCreatorFactory$PreparedStatementCreatorImpl.createPreparedStatement(PreparedStatementCreatorFactory.java:244) 
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:627) 
... 25 more 
Caused by: java.io.NotSerializableException: java.lang.Object 
at java.io.ObjectOutputStream.writeObject0(Unknown Source) 
at java.io.ObjectOutputStream.writeObject(Unknown Source) 
at com.mysql.jdbc.PreparedStatement.setSerializableObject(PreparedStatement.java:3818) 
... 33 more 

私はここで間違っていますか?

+0

おそらく、mytableのクラスをSerializableインターフェイスのサブクラスとして持つことはできません。データオブジェクトは、データベースに永続化されるために、そのインタフェースを実装する必要があります。 – code4kix

+0

正しい ':id'は' SqlParameterSource'のオブジェクトに対して単純に評価されるべきです。 'myRowMapper'が' getId() 'を使って適切なPOJOを返すことを確認しなければなりません。これは本当に後続のUPDATEにマップされる適切な型です。私たちはその情報を持っていないので、あなたを助けることはできません。 –

+0

@ArtemBilanはい、私の答えで言及したように、問題は私のPOJOにありました。どうもありがとうございます :) –

答えて

0

私はArtem Bilanに感謝しています。私はそれを想定しています:idは、SELECTの結果セット内の列名のうち "id"にマップされ、POJOではgetId()にはマッピングされません。私のRowMapperはPOJOの "id"を "requestId"にマッピングしていました。それは間違いでした。

関連する問題