BUG1:SpringMVC + Tomcat启动报错
用Tomcat启动项目时报错:Error during artifact deployment. See server log for details.
Debug
发现web容器配置文件web.xml中applicationContext.xml、spring-mvc.xml的等spring容器配置文件均无法被识别;
Project Structure → Modules → 将Resource所在文件夹标记为Resources,问题解决。
BUG2:springboot默认数据源Hikari数据库连接池报错
HikariPool Connection is not available, request timed out after 60003ms
Debug
通过追踪日志,发现提示:cannot acquire JDBC connection
猜想可能是因为数据源连接池的最大连接数不足,连接池甚至来不及通过connection.close()方法回收已建立的连接,客户端便发起新的Web请求查询数据库,建立了新的数据库连接。于是连接池中的连接很快被耗尽,无法再响应客户端新发起的查询数据库的请求。
在springboot的application.properties中添加如下配置:
spring.datasource.hikari.maximum-pool-size=150
扩充最大连接数,问题解决。
BUG3:Hibenate4使用HQL语句查询集合出现重复数据
3.1 情况出现原因
在建表时没有设置主键,但是由于Hibernate框架的要求,在实体类中必须设置主键,也就是必须有一个字段被@Id
注解标记。
使用HQL查询数据集合时:
getSession().createQuery(hql).list()
查出数据是重复的。
这是因为使用HQL查询数据时,默认情况下主键的值是不可重复的,但在数据库表中没有设置主键,而表中多行数据该字段下的值出现了重复,这与HQL的默认设定相违背。
但list方法会查出多条符合HQL查询条件的数据,也就是查询出的集合(List<Pojo>)大小为N,于是HQL采取的对策是:只查出第一条数据,然后将这条数据复制多次,直到将集合填满(重复复制N次)。
3.2 解决办法
需在两处地方进行修改:
Java代码:在实体类中新建字段为主键,或设置其他值不会重复的字段为主键(@Id注解标记)。
数据库:将新设置的实体类主键对应的表的字段设为主键(Primary Key)。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/19596.html