spring+mybatis Pre-instantiating singletons 卡死

今天在写代码时,遇到一个奇葩问题:

315  INFO  [2016-10-26 17:22:34] [org.springframework.beans.factory.xml.XmlBeanDefinitionReader] Loading XML bean definitions from URL [file:src/main/webapp/WEB-INF/springApplicationContext.xml]
510  INFO  [2016-10-26 17:22:35] [org.springframework.context.support.GenericApplicationContext] Refreshing org.springframework.context.support.GenericApplicationContext@7225790e: startup date [Wed Oct 26 17:22:35 CST 2016]; root of context hierarchy
172  INFO  [2016-10-26 17:22:35] [org.springframework.beans.factory.config.PropertyPlaceholderConfigurer] Loading properties file from class path resource [console-server.properties]
603  INFO  [2016-10-26 17:22:35] [org.springframework.beans.factory.support.DefaultListableBeanFactory] Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@36bc55de: defining beans [springContextUtil,mvcContentNegotiationManager,org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping#0,org.springframework.format.support.FormattingConversionServiceFactoryBean#0,org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter#0,org.springframework.web.servlet.handler.MappedInterceptor#0,org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver#0,org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver#0,org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver#0,org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,org.springframework.aop.config.internalAutoProxyCreator,org.springframework.transaction.annotation.AnnotationTransactionAttributeSource#0,org.springframework.transaction.interceptor.TransactionInterceptor#0,org.springframework.transaction.config.internalTransactionAdvisor,org.springframework.context.annotation.internalConfigurationAnnotationProcessor,org.springframework.context.annotation.internalAutowiredAnnotationProcessor,org.springframework.context.annotation.internalRequiredAnnotationProcessor,org.springframework.context.annotation.internalCommonAnnotationProcessor,consoleServerConf,yoyopkgConf,zabbixConf,asynchronousRequestController,globalController,graphsController,hostController,packageCollectorController,packageController,scriptController,softwareRoleOperationController,tasksLogController,userController,zabbixController,scriptOperationDaoImpl,softwareRoleOperationDaoImpl,zabbixDaoImpl,asynchronousRequestService,clustersServiceImpl,graphsServiceImpl,hostsServiceImpl,packageCollectorServiceImpl,packageServiceImpl,scriptOperationServiceImpl,softwareRoleOperationServiceImpl,sysConfigServiceImpl,tasksLogServiceImpl,tasksServiceImpl,userServiceImpl,zabbixServiceImpl,jsonUtil,org.springframework.beans.factory.config.PropertyPlaceholderConfigurer#0,dataSource,transactionManager,sqlSessionFactory,org.mybatis.spring.mapper.MapperScannerConfigurer#0,springfactory,org.springframework.context.annotation.ConfigurationClassPostProcessor.importAwareProcessor,clustersMapper,graphsMapper,groupsMapper,hostIdentifyMapper,hostsMapper,packageCollectorInstanceMapper,packageCollectorItemMapper,packageCollectorMapper,packageCollectorTriggerMapper,packagesMapper,serviceRoleConfigRolesMapper,serviceRoleConfigsMapper,serviceRoleControlMapper,serviceRolesMapper,servicesMapper,sysConfigMapper,tasksLogMapper,tasksMapper,userMapper,zabbixMapper]; root of factory hierarchy

运行到603后卡住,web项目启动不成功,没有任何提示信息。   

问题描述:实现一个数据库插入操作,编写了 controller层,service层,Dao层代码,及mapper.xml文件,在测试的时候就出现如上错误,执行到603就不能再执行下去,每次执行到 603 都会卡主,没有任何报错;

尝试方法:clean 工程,clean maven ,重启eclipse,重启电脑,等等方法都试过了,就是一执行到这个地方就卡住,不再向下运行,后来删掉这个mapper.xml文件就可以正常执行了。

问题定位:后来重新导入自己写的文件,发现问题出在mapper文件中,定义parameterType=“” 这里参数类型写错了,当在mapper.xml中 sql 块中改对参数类型后,就可以继续向下执行了。

<!-- <?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE mapper

  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"

  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

  <mapper namespace="ScriptOperation">

  <insert id="kk" parameterType="java.utl.List">

  </insert>

  </mapper>

但是还是不懂是为什么,还有很多知识都不懂,以后一定要看mybatis的源码。   

-----------------------------------————————————————————————————————————————————————————

时隔1年,再次遇到这种问题(web项目启动后运行到603后卡死,没有日志输出),还是无从下手;刚开始时检查注解是否正确;然后是mapper.java类定义的是不是正确;再就是找到这篇博客,检查map.xml文件中参数类型定义是否正确;后来实在定位不到错误,最后只能将类注释掉,一个一个排除; 最后终于定位到是HostsMapper.java文件定义出现问题了,由于这个类是之前维护的,现在同事要修改,用全局替换,结果在Mapper.java类中把两个方法的名称弄成相同的了,但是java并没有报警告(方法参数列表中两个参数的顺序不同,但类型是相同的,把它认成重载了吧),它们各自实现不同的sql,但是spring 并不能识别出来。

猜测: mapper.java 中的函数名相当于一个id 和 mapper.xml中sql 块中的 id 含义相同,只能有一个,不能重复。 虽然在java代码编译能通过,但是mybatis内部不能解析。

刨坑:在mapper文件中不要有相同的方法名;

eg1:

@Update("update c_datacenter set parent_id=#{parent_id} ")

int updateDatacenter(@Param("datacenterIds") List<Integer> datacenterIds ,@Param("parent_id")int parent_id);

@Update("update c_datacenter set name=#{name} where datacenter_id=#{datacenter_id}")

int updateDatacenter(@Param("name")String name,@Param("datacenter_id")int datacenter_id);

将其中一个方法名改了之后,就能正常运行了。

============

错误提示如下:

603  INFO  [2017-08-17 23:13:55] [org.springframework.beans.factory.support.DefaultListableBeanFactory] Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@4f5f6e45:

===========

pstgres数据库:

创建表  --》没问题:

但注意主键,自增的设置。不然后面还要费脑筋弄。

设置主键: alter table c_script_info column sh_id primary key

修改主键使自增:   alter table c_script_info column sh_id   set default n extval('c_cluster_id');  





原文地址:https://www.cnblogs.com/yeemi/p/7470143.html