JAVA開發常見錯誤總結

JAVA開發常見錯誤總結

  • Cause: java.sql.SQLException: 無效的列類型: 1111
  • Caused by: org.apache.ibatis.executor.ExecutorException: No constructor found in XXX matching
    • 錯誤log
    • 原因分析:
    • 解決辦法(兩種)
      • 第一種 POJO增加默認無參構造方法
      • 第二種 Mapper.xml中增加 POJO中對應的

        Cause: java.sql.SQLException: 無效的列類型: 1111

        錯誤log

        2020-02-18 13:19:06.995 [http-nio-8088-exec-5] ERROR :131- 發生錯誤
        org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property='__frch_item_0.cc', mode=IN, javaType=class java.lang.String, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. Cause: org.apache.ibatis.type.TypeException: Error setting null for parameter #3 with JdbcType OTHER . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. Cause: java.sql.SQLException: 無效的列類型: 1111
        	at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:79)
        	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:447)
        	at com.sun.proxy.$Proxy76.insert(Unknown Source)
        	at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:279)
        	at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:56)
        	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:53)
        	at com.sun.proxy.$Proxy82.inserteMailInfoList(Unknown Source)
        	at cn.jsfund.ds.monitor.db.service.AlarmDBServiceImpl.inserteMailInfoList(AlarmDBServiceImpl.java:116)
        	at cn.jsfund.ds.monitor.db.service.AlarmDBServiceImpl$$FastClassBySpringCGLIB$$99fe76f9.invoke(<generated>)
        	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
        	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:720)
        	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
        	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
        	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
        	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:655)
        	at cn.jsfund.ds.monitor.db.service.AlarmDBServiceImpl$$EnhancerBySpringCGLIB$$5e81d13b.inserteMailInfoList(<generated>)
        	at cn.jsfund.ds.monitor.service.AlarmServiceImpl.sendNotice(AlarmServiceImpl.java:225)
        	at cn.jsfund.ds.monitor.service.AlarmServiceImpl.sendMessage(AlarmServiceImpl.java:125)
        	at cn.jsfund.ds.monitor.service.AlarmServiceImpl.sendMessage(AlarmServiceImpl.java:49)
        	at cn.jsfund.ds.monitor.web.controller.WorkOrderController.updateState(WorkOrderController.java:648)
        	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        	at java.lang.reflect.Method.invoke(Method.java:497)
        	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
        	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
        	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:114)
        	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
        	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
        	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
        	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
        	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
        	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
        	at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:872)
        	at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
        	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
        	at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
        	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:230)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
        	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
        	at cn.jsfund.ds.monitor.web.common.AuthorityFilter.doFilter(AuthorityFilter.java:58)
        	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
        	at cn.jsfund.ds.monitor.web.common.CORSFilter.doFilter(CORSFilter.java:59)
        	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
        	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
        	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
        	at org.springframework.web.filter.HttpPutFormContentFilter.doFilterInternal(HttpPutFormContentFilter.java:87)
        	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
        	at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:77)
        	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
        	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
        	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
        	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:192)
        	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:165)
        	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
        	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108)
        	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:522)
        	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
        	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
        	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
        	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)
        	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:1110)
        	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
        	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:785)
        	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1425)
        	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
        	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
        	at java.lang.Thread.run(Thread.java:745)
        Caused by: org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property='__frch_item_0.cc', mode=IN, javaType=class java.lang.String, jdbcType=null, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. Cause: org.apache.ibatis.type.TypeException: Error setting null for parameter #3 with JdbcType OTHER . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. Cause: java.sql.SQLException: 無效的列類型: 1111
        	at org.apache.ibatis.scripting.defaults.DefaultParameterHandler.setParameters(DefaultParameterHandler.java:89)
        	at org.apache.ibatis.executor.statement.PreparedStatementHandler.parameterize(PreparedStatementHandler.java:93)
        	at org.apache.ibatis.executor.statement.RoutingStatementHandler.parameterize(RoutingStatementHandler.java:64)
        	at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:86)
        	at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:49)
        	at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:117)
        	at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:76)
        	at sun.reflect.GeneratedMethodAccessor282.invoke(Unknown Source)
        	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        	at java.lang.reflect.Method.invoke(Method.java:497)
        	at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:63)
        	at com.sun.proxy.$Proxy102.update(Unknown Source)
        	at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:198)
        	at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:185)
        	at sun.reflect.GeneratedMethodAccessor296.invoke(Unknown Source)
        	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        	at java.lang.reflect.Method.invoke(Method.java:497)
        	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:434)
        	... 78 common frames omitted
        Caused by: org.apache.ibatis.type.TypeException: Error setting null for parameter #3 with JdbcType OTHER . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. Cause: java.sql.SQLException: 無效的列類型: 1111
        	at org.apache.ibatis.type.BaseTypeHandler.setParameter(BaseTypeHandler.java:47)
        	at org.apache.ibatis.scripting.defaults.DefaultParameterHandler.setParameters(DefaultParameterHandler.java:87)
        	... 95 common frames omitted
        Caused by: java.sql.SQLException: 無效的列類型: 1111
        	at oracle.jdbc.driver.OracleStatement.getInternalType(OracleStatement.java:4369)
        	at oracle.jdbc.driver.OraclePreparedStatement.setNullCritical(OraclePreparedStatement.java:5836)
        	at oracle.jdbc.driver.OraclePreparedStatement.setNull(OraclePreparedStatement.java:5818)
        	at oracle.jdbc.driver.OraclePreparedStatementWrapper.setNull(OraclePreparedStatementWrapper.java:1292)
        	at sun.reflect.GeneratedMethodAccessor297.invoke(Unknown Source)
        	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        	at java.lang.reflect.Method.invoke(Method.java:497)
        	at org.apache.tomcat.jdbc.pool.interceptor.AbstractQueryReport$StatementProxy.invoke(AbstractQueryReport.java:233)
        	at com.sun.proxy.$Proxy90.setNull(Unknown Source)
        	at org.apache.ibatis.type.BaseTypeHandler.setParameter(BaseTypeHandler.java:45)
        	... 96 common frames omitted
        2020-02-18 13:19:08.463 [pool-5-thread-1] ERROR o.s.s.s.TaskUtils$LoggingErrorHandler:95- Unexpected error occurred in scheduled task.
        kafka.common.FailedToSendMessageException: Failed to send messages after 3 tries.
        	at kafka.producer.async.DefaultEventHandler.handle(Unknown Source)
        	at kafka.producer.Producer.send(Unknown Source)
        	at kafka.javaapi.producer.Producer.send(Unknown Source)
        	at cn.jsfund.ds.common.kafka.KafkaSender.send(KafkaSender.java:26)
        	at cn.jsfund.ds.monitor.service.KafkaServiceImpl.sendMsg(KafkaServiceImpl.java:92)
        	at cn.jsfund.ds.monitor.ScheduledTasks.querySomeDataAndPush(ScheduledTasks.java:69)
        	at sun.reflect.GeneratedMethodAccessor176.invoke(Unknown Source)
        	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        	at java.lang.reflect.Method.invoke(Method.java:497)
        	at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:65)
        	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(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:1142)
        	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        	at java.lang.Thread.run(Thread.java:745)
        

        原因分析:

        mybatis在讀取數據時回進行自動轉換,但當傳入值爲 null 時,mybatis 就不知道如何處理 null

        <update id="update" parameterType="com.model.User">
                update table
                <set>
                     userid = #{userid }   // 當userid 傳入null時,拋出上述異常,userid 在user中的類型爲Long
                </set>
                where id = #{id}
        </update>
        

        解決辦法

        第一種:全局解決NULL轉換問題

        在配置文件mybatis-config.xml中加入如下代碼:

        <?xml version="1.0" encoding="UTF-8" ?> 
        <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> 
        <configuration> 
             /* 增加全局解決配置 */
            <settings>
                <setting name="jdbcTypeForNull" value="NULL" />
            </settings>
           
        </configuration>
        

        第二種:當前語句指定null轉換類型

        <update id="update" parameterType="com.model.User">
                update table
                <set>
                     userid = #{userid ,jdbcType=NUMERIC }   // 可以正常解析
                </set>
                where id = #{id}
        </update>
        

        Caused by: org.apache.ibatis.executor.ExecutorException: No constructor found in XXX matching

        錯誤log

        org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: No constructor found in cn.jsfund.ds.monitor.web.model.AlarmUser matching [java.lang.Long, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Integer, java.lang.Long, java.sql.Timestamp]
        	at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:79)
        	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:447)
        	at com.sun.proxy.$Proxy76.selectList(Unknown Source)
        	at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:231)
        	at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:128)
        	at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:68)
        	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:53)
        	at com.sun.proxy.$Proxy81.getAlarmUserByTeamId(Unknown Source)
        	at cn.jsfund.ds.monitor.db.service.AlarmDBServiceImpl.getAlarmUserByTeamId(AlarmDBServiceImpl.java:50)
        	at cn.jsfund.ds.monitor.db.service.AlarmDBServiceImpl$$FastClassBySpringCGLIB$$99fe76f9.invoke(<generated>)
        	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
        	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:720)
        	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
        	at org.springframework.aop.framework.adapter.MethodBeforeAdviceInterceptor.invoke(MethodBeforeAdviceInterceptor.java:52)
        	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:168)
        	at org.springframework.aop.aspectj.AspectJAfterAdvice.invoke(AspectJAfterAdvice.java:47)
        	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:168)
        	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
        	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
        	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:655)
        	at cn.jsfund.ds.monitor.db.service.AlarmDBServiceImpl$$EnhancerBySpringCGLIB$$f0e07272.getAlarmUserByTeamId(<generated>)
        	at cn.jsfund.ds.monitor.service.AlarmServiceImpl.sendMessage(AlarmServiceImpl.java:193)
        	at cn.jsfund.ds.monitor.quartz.CertificateLibraryJob.execute(CertificateLibraryJob.java:113)
        	at org.quartz.core.JobRunShell.run(JobRunShell.java:202)
        	at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)
        Caused by: org.apache.ibatis.executor.ExecutorException: No constructor found in cn.jsfund.ds.monitor.web.model.AlarmUser matching [java.lang.Long, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.String, java.lang.Integer, java.lang.Long, java.sql.Timestamp]
        	at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.createByConstructorSignature(DefaultResultSetHandler.java:647)
        	at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.createResultObject(DefaultResultSetHandler.java:596)
        	at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.createResultObject(DefaultResultSetHandler.java:571)
        	at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.getRowValue(DefaultResultSetHandler.java:380)
        	at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValuesForSimpleResultMap(DefaultResultSetHandler.java:339)
        	at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleRowValues(DefaultResultSetHandler.java:314)
        	at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSet(DefaultResultSetHandler.java:287)
        	at org.apache.ibatis.executor.resultset.DefaultResultSetHandler.handleResultSets(DefaultResultSetHandler.java:183)
        	at org.apache.ibatis.executor.statement.PreparedStatementHandler.query(PreparedStatementHandler.java:64)
        	at org.apache.ibatis.executor.statement.RoutingStatementHandler.query(RoutingStatementHandler.java:79)
        	at org.apache.ibatis.executor.SimpleExecutor.doQuery(SimpleExecutor.java:63)
        	at org.apache.ibatis.executor.BaseExecutor.queryFromDatabase(BaseExecutor.java:325)
        	at org.apache.ibatis.executor.BaseExecutor.query(BaseExecutor.java:156)
        	at org.apache.ibatis.executor.CachingExecutor.query(CachingExecutor.java:109)
        	at com.github.pagehelper.PageInterceptor.intercept(PageInterceptor.java:141)
        	at org.apache.ibatis.plugin.Plugin.invoke(Plugin.java:61)
        	at com.sun.proxy.$Proxy102.query(Unknown Source)
        	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:148)
        	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
        	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        	at java.lang.reflect.Method.invoke(Method.java:497)
        	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:434)
        	... 23 common frames omitted
        2020-02-18 14:15:08.446 [pool-5-thread-1] ERROR o.s.s.s.TaskUtils$LoggingErrorHandler:95- Unexpected error occurred in scheduled task.
        kafka.common.FailedToSendMessageException: Failed to send messages after 3 tries.
        	at kafka.producer.async.DefaultEventHandler.handle(Unknown Source)
        	at kafka.producer.Producer.send(Unknown Source)
        	at kafka.javaapi.producer.Producer.send(Unknown Source)
        	at cn.jsfund.ds.common.kafka.KafkaSender.send(KafkaSender.java:26)
        	at cn.jsfund.ds.monitor.service.KafkaServiceImpl.sendMsg(KafkaServiceImpl.java:92)
        	at cn.jsfund.ds.monitor.ScheduledTasks.querySomeDataAndPush(ScheduledTasks.java:69)
        	at sun.reflect.GeneratedMethodAccessor94.invoke(Unknown Source)
        	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        	at java.lang.reflect.Method.invoke(Method.java:497)
        	at org.springframework.scheduling.support.ScheduledMethodRunnable.run(ScheduledMethodRunnable.java:65)
        	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(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:1142)
        	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        	at java.lang.Thread.run(Thread.java:745)
        

        原因分析:

        因爲MyBatis運行中需要調用構造方法,而POJO類中沒有默認構造方法,而有參構造方法又因爲枚舉類而不符合數據庫返回的結果對應的字段的類型。

        解決辦法(兩種)

        第一種 POJO增加默認無參構造方法

        第二種 Mapper.xml中增加 POJO中對應的
        	class User{
        	    private Integer id;
        		private String name;
        		public User(Integer id,String name){
        			this.id = id;
        			this.name = name;
        		}
        	}
        
             <resultMap id="UserMap" type="com.lushunde.model.User" >
        		<constructor>
        		    <idarg column="id" javaType="int" />
        			<arg column="name" javaType="String" />
        		</constructor>
        		<id column="id" property="id" />
        		<result column="name" property="name" />
        	</resultMap>
        

        Cause: java.sql.SQLException: 不支持的字符集 (在類路徑中添加 orai18n.jar): ZHS16GBK

        錯誤log

        2020-02-28 16:00:43.081 [MyScheduler_Worker-2] ERROR :210- 發生錯誤: ERROR
        org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.type.TypeException: Could not set parameters for mapping: ParameterMapping{property='__frch_item_0.content', mode=IN, javaType=class java.lang.String, jdbcType=VARCHAR, numericScale=null, resultMapId='null', jdbcTypeName='null', expression='null'}. Cause: org.apache.ibatis.type.TypeException: Error setting non null for parameter #5 with JdbcType VARCHAR . Try setting a different JdbcType for this parameter or a different configuration property. Cause: java.sql.SQLException: 不支持的字符集 (在類路徑中添加 orai18n.jar): ZHS16GBK
        	at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:79)
        	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:447)
        	at com.sun.proxy.$Proxy76.insert(Unknown Source)
        	at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:279)
        	at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:56)
        	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:53)
        	at com.sun.proxy.$Proxy82.inserteMailInfoList(Unknown Source)
        	at cn.jsfund.ds.monitor.db.service.AlarmDBServiceImpl.inserteMailInfoList(AlarmDBServiceImpl.java:116)
        	at cn.jsfund.ds.monitor.db.service.AlarmDBServiceImpl$$FastClassBySpringCGLIB$$99fe76f9.invoke(<generated>)
        	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)
        	at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:720)
        	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
        	at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:92)
        	at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
        	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:655)
        	at cn.jsfund.ds.monitor.db.service.AlarmDBServiceImpl$$EnhancerBySpringCGLIB$$798bc296.inserteMailInfoList(<generated>)
        	at cn.jsfund.ds.monitor.service.AlarmServiceImpl.sendNotice(AlarmServiceImpl.java:225)
        	at cn.jsfund.ds.monitor.service.AlarmServiceImpl.sendMessage(AlarmServiceImpl.java:202
        

        原因分析

        在使用Mybatis操作oracle數據庫的時候,插入一些不支持的字符,就會拋出異常,例如 插入html片段

        解決辦法

        maven倉庫,引入orai18n.jar

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章