spring batch exception无法构造java.util.Map $ Entry [英] spring batch exception Cannot construct java.util.Map$Entry

查看:163
本文介绍了spring batch exception无法构造java.util.Map $ Entry的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

从命令行执行spring批处理作业时,我们面临以下异常。
Spring Batch版本 - 3.0.2.RELEASE
Spring版本 - 4.0.0.RELEASE
xStream版本 - 1.4.7
数据库 - mysql(我连接到新数据库) schema。)
使用以下命令执行作业时,我遇到异常...

We are facing following exception while executing spring batch job from command line. Spring Batch Version - 3.0.2.RELEASE Spring Version - 4.0.0.RELEASE xStream version - 1.4.7 Data Base - mysql (I am connecting to new DB schema.) While executing a job using following command, I am getting below exception...

    java %JAVA_OPTS% org.springframework.batch.core.launch.support.CommandLineJobRunner config/spring-config.xml partitionJdbcJob

    Exception
    ----------

    INFO: Loaded JDBC driver: com.mysql.jdbc.Driver
    Feb 20, 2015 3:22:28 PM org.springframework.batch.core.launch.support.SimpleJobLauncher afterPropertiesSet
    INFO: No TaskExecutor has been set, defaulting to synchronous executor.
    Feb 20, 2015 3:22:29 PM org.springframework.batch.core.launch.support.SimpleJobLauncher run
    INFO: Job: [FlowJob: [name=partitionJdbcJob]] launched with the following parameters: [{}]
    Feb 20, 2015 3:22:29 PM org.springframework.batch.core.job.AbstractJob execute

    SEVERE: Encountered fatal error executing job
    org.springframework.batch.core.JobExecutionException: Flow execution ended unexpectedly
            at org.springframework.batch.core.job.flow.FlowJob.doExecute(FlowJob.java:140)
            at org.springframework.batch.core.job.AbstractJob.execute(AbstractJob.java:304)
            at org.springframework.batch.core.launch.support.SimpleJobLauncher$1.run(SimpleJobLauncher.java:135)
            at org.springframework.core.task.SyncTaskExecutor.execute(SyncTaskExecutor.java:50)
            at org.springframework.batch.core.launch.support.SimpleJobLauncher.run(SimpleJobLauncher.java:128)
            at org.springframework.batch.core.launch.support.CommandLineJobRunner.start(CommandLineJobRunner.java:362)
            at org.springframework.batch.core.launch.support.CommandLineJobRunner.main(CommandLineJobRunner.java:590)
    Caused by: org.springframework.batch.core.job.flow.FlowExecutionException: Ended flow=partitionJdbcJob at state=partitionJdbcJob.step with exception
            at org.springframework.batch.core.job.flow.support.SimpleFlow.resume(SimpleFlow.java:174)
            at org.springframework.batch.core.job.flow.support.SimpleFlow.start(SimpleFlow.java:144)
            at org.springframework.batch.core.job.flow.FlowJob.doExecute(FlowJob.java:134)
            ... 6 more
    Caused by: com.thoughtworks.xstream.converters.ConversionException: Cannot construct java.util.Map$Entry : java.util.Map$Entry : Cannot construct java.util.Map$
    Entry : java.util.Map$Entry

    ---- Debugging information ----
    message             : Cannot construct java.util.Map$Entry : java.util.Map$Entry
    cause-exception     : com.thoughtworks.xstream.converters.reflection.ObjectAccessException
    cause-message       : Cannot construct java.util.Map$Entry : java.util.Map$Entry
    class               : java.util.Map$Entry
    required-type       : java.util.Map$Entry
    converter-type      : com.thoughtworks.xstream.converters.reflection.ReflectionConverter
    path                : /map/map/entry
    line number         : -1
    class[1]            : java.util.HashMap
    converter-type[1]   : com.thoughtworks.xstream.converters.collections.MapConverter
    version             : 1.4.7
    -------------------------------
            at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:79)
            at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
            at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
            at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)
            at com.thoughtworks.xstream.converters.collections.AbstractCollectionConverter.readItem(AbstractCollectionConverter.java:71)
            at com.thoughtworks.xstream.converters.collections.MapConverter.putCurrentEntryIntoMap(MapConverter.java:106)
            at com.thoughtworks.xstream.converters.collections.MapConverter.populateMap(MapConverter.java:98)
            at com.thoughtworks.xstream.converters.collections.MapConverter.populateMap(MapConverter.java:92)
            at com.thoughtworks.xstream.converters.collections.MapConverter.unmarshal(MapConverter.java:87)
            at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
            at com.thoughtworks.xstream.core.AbstractReferenceUnmarshaller.convert(AbstractReferenceUnmarshaller.java:65)
            at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:66)
            at com.thoughtworks.xstream.core.TreeUnmarshaller.convertAnother(TreeUnmarshaller.java:50)
            at com.thoughtworks.xstream.core.TreeUnmarshaller.start(TreeUnmarshaller.java:134)
            at com.thoughtworks.xstream.core.AbstractTreeMarshallingStrategy.unmarshal(AbstractTreeMarshallingStrategy.java:32)
            at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1185)
            at com.thoughtworks.xstream.XStream.unmarshal(XStream.java:1169)
            at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1040)
            at com.thoughtworks.xstream.XStream.fromXML(XStream.java:1031)
            at org.springframework.batch.core.repository.dao.XStreamExecutionContextStringSerializer.deserialize(XStreamExecutionContextStringSerializer.java:112)
            at org.springframework.batch.core.repository.dao.XStreamExecutionContextStringSerializer.deserialize(XStreamExecutionContextStringSerializer.java:45)
            at org.springframework.batch.core.repository.dao.JdbcExecutionContextDao$ExecutionContextRowMapper.mapRow(JdbcExecutionContextDao.java:322)
            at org.springframework.batch.core.repository.dao.JdbcExecutionContextDao$ExecutionContextRowMapper.mapRow(JdbcExecutionContextDao.java:309)
            at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:93)
            at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:60)
            at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:706)
            at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:642)
            at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:693)
            at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:725)
            at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:735)
            at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:790)
            at org.springframework.batch.core.repository.dao.JdbcExecutionContextDao.getExecutionContext(JdbcExecutionContextDao.java:127)
            at org.springframework.batch.core.repository.support.SimpleJobRepository.getLastStepExecution(SimpleJobRepository.java:238)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
            at java.lang.reflect.Method.invoke(Unknown Source)
            at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
            at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
            at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
            at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98)
            at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262)
            at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95)
            at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
            at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
            at $Proxy7.getLastStepExecution(Unknown Source)
            at org.springframework.batch.core.job.SimpleStepHandler.handleStep(SimpleStepHandler.java:115)
            at org.springframework.batch.core.job.flow.JobFlowExecutor.executeStep(JobFlowExecutor.java:64)
            at org.springframework.batch.core.job.flow.support.state.StepState.handle(StepState.java:67)
            at org.springframework.batch.core.job.flow.support.SimpleFlow.resume(SimpleFlow.java:165)
            ... 8 more
    Caused by: com.thoughtworks.xstream.converters.reflection.ObjectAccessException: Cannot construct java.util.Map$Entry : java.util.Map$Entry
            at com.thoughtworks.xstream.converters.reflection.SunLimitedUnsafeReflectionProvider.newInstance(SunLimitedUnsafeReflectionProvider.java:80)
            at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.instantiateNewInstance(AbstractReflectionConverter.java:553)
            at com.thoughtworks.xstream.converters.reflection.AbstractReflectionConverter.unmarshal(AbstractReflectionConverter.java:256)
            at com.thoughtworks.xstream.core.TreeUnmarshaller.convert(TreeUnmarshaller.java:72)
            ... 57 more
    Caused by: java.lang.InstantiationException: java.util.Map$Entry
            at sun.misc.Unsafe.allocateInstance(Native Method)
            at com.thoughtworks.xstream.converters.reflection.SunLimitedUnsafeReflectionProvider.newInstance(SunLimitedUnsafeReflectionProvider.java:76)
            ... 60 more
Spring Config
----------------
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:task="http://www.springframework.org/schema/task"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
                            http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
                            http://www.springframework.org/schema/context
                            http://www.springframework.org/schema/context/spring-context-4.0.xsd
                            http://www.springframework.org/schema/batch http://www.springframework.org/schema/batch/spring-batch.xsd
                            http://www.springframework.org/schema/task 
                            http://www.springframework.org/schema/task/spring-task-3.2.xsd">

    <context:annotation-config /> 

    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql://localhost:3306/newspringbatch?useServerPrepStmts=false&amp;rewriteBatchedStatements=true" />
        <property name="username" value="uid" />
        <property name="password" value="pwd" />
    </bean>

    <bean id="transactionManager"
        class="org.springframework.batch.support.transaction.ResourcelessTransactionManager" />

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <constructor-arg ref="pooledDS" />
    </bean>

    <!-- DB Pooling -->
    <bean id="pool" class="org.apache.commons.pool.impl.GenericObjectPool">
        <property name="minEvictableIdleTimeMillis"><value>300000</value></property>
        <property name="timeBetweenEvictionRunsMillis"><value>60000</value></property>
    </bean>

    <bean id="dsConnectionFactory" class="org.apache.commons.dbcp.DataSourceConnectionFactory">
        <constructor-arg><ref bean="dataSource"/></constructor-arg>
    </bean>

    <bean id="poolableConnectionFactory" class="org.apache.commons.dbcp.PoolableConnectionFactory">
        <constructor-arg index="0"><ref bean="dsConnectionFactory"/></constructor-arg>
        <constructor-arg index="1"><ref bean="pool"/></constructor-arg>
        <constructor-arg index="2"><null/></constructor-arg>
        <constructor-arg index="3"><null/></constructor-arg>
        <constructor-arg index="4"><value>false</value></constructor-arg>
        <constructor-arg index="5"><value>true</value></constructor-arg>
    </bean>

    <bean id="pooledDS" class="org.apache.commons.dbcp.PoolingDataSource" depends-on="poolableConnectionFactory">
        <constructor-arg><ref bean="pool"/></constructor-arg>
    </bean>

    <!-- stored job-meta in database -->
    <bean id="batchDefaultSerializer" class="org.springframework.batch.core.repository.dao.DefaultExecutionContextSerializer" />


    <bean id="jobRepository"
        class="org.springframework.batch.core.repository.support.JobRepositoryFactoryBean">
        <property name="dataSource" ref="pooledDS" />
        <property name="transactionManager" ref="transactionManager" />
        <property name="databaseType" value="mysql" />  

    </bean>

    <bean id="jobLauncher"
        class="org.springframework.batch.core.launch.support.SimpleJobLauncher">
        <property name="jobRepository" ref="jobRepository" />
    </bean>

    <bean id="castorMarshaller" class="org.springframework.oxm.castor.CastorMarshaller"></bean>

    <bean id="userUnmarshaller" class="org.springframework.oxm.xstream.XStreamMarshaller"></bean>

    <job id="partitionJdbcJob" restartable="true" xmlns="http://www.springframework.org/schema/batch">  
        <step id="step" >
            <partition step="createFiles" partitioner="partitioner">
                <handler grid-size="50" task-executor="taskExecutor" />
            </partition>
        </step>
        <listeners>
            <listener ref="jobDurationListener" />
        </listeners>
    </job>

    <step id="createFiles" xmlns="http://www.springframework.org/schema/batch">
        <tasklet>
            <chunk reader="pagingItemReader" processor="filesItemProcessor"
                writer="filesItemWriter" commit-interval="200" />
        </tasklet>
    </step>

    <!-- PagingItemReader will be used for big records only -->
    <bean id="pagingItemReader" class="org.springframework.batch.item.database.JdbcPagingItemReader"
        scope="step" autowire-candidate="false">
        <property name="dataSource" ref="pooledDS" />
        <property name="rowMapper" ref="reconRowMapper" />
        <!-- Query Provider -->
        <property name="queryProvider">
            <bean
                class="org.springframework.batch.item.database.support.SqlPagingQueryProviderFactoryBean">
                <property name="dataSource" ref="pooledDS" />
                <property name="fromClause" value="from sample" />
                <property name="selectClause" value="id,name" />
                <property name="sortKey" value="id" />

            </bean>
        </property>

        <!-- Inject via the ExecutionContext in partitioner -->
        <property name="parameterValues">
            <map>
                <entry key="minId" value="#{stepExecutionContext[minValue]}" />
                <entry key="maxId" value="#{stepExecutionContext[maxValue]}" />
            </map>
        </property>
    </bean>

    <bean id="filesItemProcessor" class="com.batch.job.ResultProcessor" />

    <bean id="filesItemWriter" class="org.springframework.batch.item.file.FlatFileItemWriter"
        scope="step">
        <property name="resource" value="#{stepExecutionContext[outputFile]}" />
        <property name="shouldDeleteIfExists" value="true" />
        <property name="lineAggregator">
            <bean
                class="org.springframework.batch.item.file.transform.DelimitedLineAggregator">
                <property name="delimiter" value="," />
                <property name="fieldExtractor">
                    <bean
                        class="org.springframework.batch.item.file.transform.BeanWrapperFieldExtractor">
                        <property name="names" value="id,name" />
                    </bean>
                </property>
            </bean>
        </property>
    </bean>
</beans>


    Feb 20, 2015 3:22:29 PM org.springframework.batch.core.launch.support.SimpleJobLauncher run
    INFO: Job: [FlowJob: [name=partitionJdbcJob]] completed with the following parameters: [{}] and the following status: [FAILED]
    Feb 20, 2015 3:22:29 PM org.springframework.context.support.ClassPathXmlApplicationContext doClose
    INFO: Closing org.springframework.context.support.ClassPathXmlApplicationContext
    @d37d44: startup date [Fri Feb 20 15:22:27 IST 2015]; root of context hierarchy


推荐答案

运行Spring Batch时遇到同样的问题工作。在:

Had same issue when running Spring Batch Job. At:

Set<JobExecution> runningJobExecutions = jobExplorer.findRunningJobExecutions(jobName);

使用jettison 1.1代替1.3.2

Solved by using jettison 1.1 instead of 1.3.2

这篇关于spring batch exception无法构造java.util.Map $ Entry的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆