我试图用jdbc出站网关在mysql数据库中插入数据,但是出现了这个错误
嵌套异常为java.sql.sqlexception:参数值无效:java.io.notserializableexception
app-config.xml无效
<int-jdbc:inbound-channel-adapter
id="jdbcExtractor"
data-source="dataSource"
query="select * from Persons"
row-mapper="personRowMapeer"
channel="dataChannel">
<int:poller
fixed-delay="10000">
</int:poller>
</int-jdbc:inbound-channel-adapter>
<int:service-activator id="beanParser" input-channel="dataChannel" output-channel="JdbcChannel" ref="extractData" method="extractJdbcData" ></int:service-activator>
<int:channel id="JdbcChannel"></int:channel>
<int:channel id="testReply"></int:channel>
<int-jdbc:outbound-gateway
request-channel="JdbcChannel"
reply-channel="testReply"
request-sql-parameter-source-factory="requestSource"
reply-sql-parameter-source-factory="replySource"
data-source="dataSource"
update="insert into Persons (PersonID,LastName,FirstName,Address,City) values (:PersonID, :LastName, :FirstName, :Address, :City)"
query="select * from Persons where PersonID = :PersonID"
id="outboundInsert" >
</int-jdbc:outbound-gateway>
<bean id="personRowMapeer" class="com.example.SpringIntegrationDemo.test.PersonRowMapper"></bean>
<bean name="extractData" class="com.example.SpringIntegrationDemo.test.ExtractData"></bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver" />
<property name="url" value="jdbc:mysql://localhost/demo" />
<property name="username" value="*****" />
<property name="password" value="*****" />
</bean>
<bean id="requestSource" class="org.springframework.integration.jdbc.ExpressionEvaluatingSqlParameterSourceFactory">
<property name="parameterExpressions">
<map>
<entry key="PersonID" value="payload.personId"/>
<entry key="LastName" value="payload.lastName"/>
<entry key="FirstName" value="payload.firstName"/>
<entry key="Address" value="payload.address" />
<entry key="City" value="payload.city" />
</map>
</property>
</bean>
<bean id="replySource" class="org.springframework.integration.jdbc.ExpressionEvaluatingSqlParameterSourceFactory">
<property name="parameterExpressions">
<map>
<entry key="PersonID" value="payload.personId"/>
</map>
</property>
</bean>
提取器等级:
public class ExtractData implements Serializable {
/**
*
*/
private static final long serialVersionUID = -6405067378057426543L;
public PersonVo extractJdbcData(List<PersonVo> personVos) {
System.out.println("Printing the result set "+personVos.size());
return personVos.get(3);
}
}
我在代码后面添加了可序列化部分。行Map器已就位。
下面是完整的堆栈跟踪
2018-08-20 22:43:04.032 INFO 9086 --- [ main] c.e.S.SpringIntegrationDemoApplication : Starting SpringIntegrationDemoApplication on pratik-HP-Pavilion-g6-Notebook-PC with PID 9086 (/home/pratik/Documents/workspace-sts-3.9.5.RELEASE/SpringIntegrationDemo/target/classes started by pratik in /home/pratik/Documents/workspace-sts-3.9.5.RELEASE/SpringIntegrationDemo)
2018-08-20 22:43:04.036 INFO 9086 --- [ main] c.e.S.SpringIntegrationDemoApplication : No active profile set, falling back to default profiles: default
2018-08-20 22:43:04.097 INFO 9086 --- [ main] s.c.a.AnnotationConfigApplicationContext : Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@143640d5: startup date [Mon Aug 20 22:43:04 IST 2018]; root of context hierarchy
2018-08-20 22:43:04.424 INFO 9086 --- [ main] o.s.b.f.xml.XmlBeanDefinitionReader : Loading XML bean definitions from URL [file:/home/pratik/Documents/workspace-sts-3.9.5.RELEASE/SpringIntegrationDemo/target/classes/app-config.xml]
2018-08-20 22:43:04.704 INFO 9086 --- [ main] o.s.i.config.IntegrationRegistrar : No bean named 'integrationHeaderChannelRegistry' has been explicitly defined. Therefore, a default DefaultHeaderChannelRegistry will be created.
2018-08-20 22:43:05.201 INFO 9086 --- [ main] faultConfiguringBeanFactoryPostProcessor : No bean named 'errorChannel' has been explicitly defined. Therefore, a default PublishSubscribeChannel will be created.
2018-08-20 22:43:05.203 INFO 9086 --- [ main] faultConfiguringBeanFactoryPostProcessor : No bean named 'taskScheduler' has been explicitly defined. Therefore, a default ThreadPoolTaskScheduler will be created.
2018-08-20 22:43:05.454 INFO 9086 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$978e7c27] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-08-20 22:43:05.559 INFO 9086 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.integration.config.IntegrationManagementConfiguration' of type [org.springframework.integration.config.IntegrationManagementConfiguration$$EnhancerBySpringCGLIB$$2803756] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2018-08-20 22:43:05.794 INFO 9086 --- [ main] o.s.s.c.ThreadPoolTaskScheduler : Initializing ExecutorService 'taskScheduler'
2018-08-20 22:43:05.888 INFO 9086 --- [ main] o.s.j.d.DriverManagerDataSource : Loaded JDBC driver: com.mysql.jdbc.Driver
2018-08-20 22:43:06.659 INFO 9086 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
2018-08-20 22:43:06.671 INFO 9086 --- [ main] o.s.c.support.DefaultLifecycleProcessor : Starting beans in phase 0
2018-08-20 22:43:06.672 INFO 9086 --- [ main] o.s.i.endpoint.EventDrivenConsumer : Adding {service-activator:beanParser} as a subscriber to the 'dataChannel' channel
2018-08-20 22:43:06.672 INFO 9086 --- [ main] o.s.integration.channel.DirectChannel : Channel 'application.dataChannel' has 1 subscriber(s).
2018-08-20 22:43:06.672 INFO 9086 --- [ main] o.s.i.endpoint.EventDrivenConsumer : started beanParser
2018-08-20 22:43:06.672 INFO 9086 --- [ main] o.s.i.endpoint.EventDrivenConsumer : Adding {jdbc:outbound-gateway:outboundInsert} as a subscriber to the 'JdbcChannel' channel
2018-08-20 22:43:06.672 INFO 9086 --- [ main] o.s.integration.channel.DirectChannel : Channel 'application.JdbcChannel' has 1 subscriber(s).
2018-08-20 22:43:06.672 INFO 9086 --- [ main] o.s.i.endpoint.EventDrivenConsumer : started outboundInsert
2018-08-20 22:43:06.672 INFO 9086 --- [ main] o.s.i.endpoint.EventDrivenConsumer : Adding {logging-channel-adapter:_org.springframework.integration.errorLogger} as a subscriber to the 'errorChannel' channel
2018-08-20 22:43:06.673 INFO 9086 --- [ main] o.s.i.channel.PublishSubscribeChannel : Channel 'application.errorChannel' has 1 subscriber(s).
2018-08-20 22:43:06.673 INFO 9086 --- [ main] o.s.i.endpoint.EventDrivenConsumer : started _org.springframework.integration.errorLogger
2018-08-20 22:43:06.673 INFO 9086 --- [ main] o.s.c.support.DefaultLifecycleProcessor : Starting beans in phase 1073741823
2018-08-20 22:43:06.676 INFO 9086 --- [ main] o.s.i.e.SourcePollingChannelAdapter : started jdbcExtractor
2018-08-20 22:43:06.691 INFO 9086 --- [ main] c.e.S.SpringIntegrationDemoApplication : Started SpringIntegrationDemoApplication in 2.993 seconds (JVM running for 3.91)
Printing the result set 8
2018-08-20 22:43:06.755 INFO 9086 --- [ask-scheduler-1] o.s.b.f.xml.XmlBeanDefinitionReader : Loading XML bean definitions from class path resource [org/springframework/jdbc/support/sql-error-codes.xml]
2018-08-20 22:43:06.830 ERROR 9086 --- [ask-scheduler-1] o.s.integration.handler.LoggingHandler : org.springframework.messaging.MessageHandlingException: error occurred in message handler [org.springframework.integration.jdbc.JdbcOutboundGateway#0]; nested exception is org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL [insert into Persons (PersonID,LastName,FirstName,Address,City) values (?, ?, ?, ?, ?)Invalid argument value: java.io.NotSerializableException; nested exception is java.sql.SQLException: Invalid argument value: java.io.NotSerializableException, failedMessage=GenericMessage [payload=com.example.SpringIntegrationDemo.vo.PersonVo@158c1a9d, headers={id=3be9637d-1c7a-fb51-e416-438fd8ab9e41, timestamp=1534785186707}]
at org.springframework.integration.support.utils.IntegrationUtils.wrapInHandlingExceptionIfNecessary(IntegrationUtils.java:184)
at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:175)
at org.springframework.integration.dispatcher.AbstractDispatcher.tryOptimizedDispatch(AbstractDispatcher.java:116)
at org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:132)
at org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:105)
at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:73)
at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:445)
at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:394)
at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:181)
at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:160)
at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:47)
at org.springframework.messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:108)
at org.springframework.integration.handler.AbstractMessageProducingHandler.sendOutput(AbstractMessageProducingHandler.java:426)
at org.springframework.integration.handler.AbstractMessageProducingHandler.produceOutput(AbstractMessageProducingHandler.java:336)
at org.springframework.integration.handler.AbstractMessageProducingHandler.sendOutputs(AbstractMessageProducingHandler.java:227)
at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:115)
at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:158)
at org.springframework.integration.dispatcher.AbstractDispatcher.tryOptimizedDispatch(AbstractDispatcher.java:116)
at org.springframework.integration.dispatcher.UnicastingDispatcher.doDispatch(UnicastingDispatcher.java:132)
at org.springframework.integration.dispatcher.UnicastingDispatcher.dispatch(UnicastingDispatcher.java:105)
at org.springframework.integration.channel.AbstractSubscribableChannel.doSend(AbstractSubscribableChannel.java:73)
at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:445)
at org.springframework.integration.channel.AbstractMessageChannel.send(AbstractMessageChannel.java:394)
at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:181)
at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:160)
at org.springframework.messaging.core.GenericMessagingTemplate.doSend(GenericMessagingTemplate.java:47)
at org.springframework.messaging.core.AbstractMessageSendingTemplate.send(AbstractMessageSendingTemplate.java:108)
at org.springframework.integration.endpoint.SourcePollingChannelAdapter.handleMessage(SourcePollingChannelAdapter.java:227)
at org.springframework.integration.endpoint.AbstractPollingEndpoint.doPoll(AbstractPollingEndpoint.java:290)
at org.springframework.integration.endpoint.AbstractPollingEndpoint$Poller.lambda$run$0(AbstractPollingEndpoint.java:391)
at org.springframework.integration.util.ErrorHandlingTaskExecutor.lambda$execute$0(ErrorHandlingTaskExecutor.java:57)
at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50)
at org.springframework.integration.util.ErrorHandlingTaskExecutor.execute(ErrorHandlingTaskExecutor.java:55)
at org.springframework.integration.endpoint.AbstractPollingEndpoint$Poller.run(AbstractPollingEndpoint.java:385)
at org.springframework.scheduling.support.DelegatingErrorHandlingRunnable.run(DelegatingErrorHandlingRunnable.java:54)
at org.springframework.scheduling.concurrent.ReschedulingRunnable.run(ReschedulingRunnable.java:93)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180)
at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: org.springframework.dao.TransientDataAccessResourceException: PreparedStatementCallback; SQL [insert into Persons (PersonID,LastName,FirstName,Address,City) values (?, ?, ?, ?, ?)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:110)
at org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:72)
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.translateException(JdbcTemplate.java:1402)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:620)
at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:850)
at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:871)
at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.update(NamedParameterJdbcTemplate.java:317)
at org.springframework.integration.jdbc.JdbcMessageHandler.executeUpdateQuery(JdbcMessageHandler.java:198)
at org.springframework.integration.jdbc.JdbcOutboundGateway.handleRequestMessage(JdbcOutboundGateway.java:136)
at org.springframework.integration.handler.AbstractReplyProducingMessageHandler.handleMessageInternal(AbstractReplyProducingMessageHandler.java:109)
at org.springframework.integration.handler.AbstractMessageHandler.handleMessage(AbstractMessageHandler.java:158)
... 41 more
Caused by: java.sql.SQLException: Invalid argument value: java.io.NotSerializableException
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920)
at com.mysql.jdbc.PreparedStatement.setSerializableObject(PreparedStatement.java:4414)
at com.mysql.jdbc.PreparedStatement.setObject(PreparedStatement.java:4085)
at org.springframework.jdbc.core.StatementCreatorUtils.setValue(StatementCreatorUtils.java:411)
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValueInternal(StatementCreatorUtils.java:232)
at org.springframework.jdbc.core.StatementCreatorUtils.setParameterValue(StatementCreatorUtils.java:147)
at org.springframework.jdbc.core.PreparedStatementCreatorFactory$PreparedStatementCreatorImpl.setValues(PreparedStatementCreatorFactory.java:278)
at org.springframework.jdbc.core.PreparedStatementCreatorFactory$PreparedStatementCreatorImpl.createPreparedStatement(PreparedStatementCreatorFactory.java:236)
at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:603)
... 48 more
Caused by: java.io.NotSerializableException: java.lang.Object
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at com.mysql.jdbc.PreparedStatement.setSerializableObject(PreparedStatement.java:4403)
... 55 more
我是不是做错了什么?
1条答案
按热度按时间zhte4eai1#
问题不在于整体
ExtractData
甚至是它的PersonVo
. 你的参数有问题INSERT
:其中一些值是从
PersonVo
与到jdbc类型的普通转换不兼容。