错误启动TOMCAT时: 代理抛出异常错误: java.rmi.server.ExportException: Port already in use: 1099; nested exception is: java.net.BindException: Address already in use: JVM_Bind
原因:端口1099 被占用
解决方法: 在windows下终端输入:netstat -aon|findstr 1099 找出占用1099端口的进程
然后使用命令:taskkill -f -pid 3172 杀死对应进程
WEB项目进入某个页面出现404错误
原因:springmvc 当中为找到对应页面路径 或者对应的controller未交给springmvc 进行管理
解决办法:1 检查对应的controller 是否添加@controller 和@requestMapping 注解
2 检查注解当中的路径是否正确
3 检查当前controller 是否交给springMVC进行管理 在spring配置文件xml 当中查看 @controller的扫描路径是否包含在内 以及查看@controller扫描规则
添加时间:2018.7
启动项目时报错:Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/configuration/Configuration
原因:在项目编译时找不到对应的类。 项目当中没有引入commons-configuration-1.6.jar这个JAR包
处理方式:检查对应jar包是否包含在应用程序的lib文件夹中,您可能通过ant或maven打包离开它。下一个可能的原因可能是jar被损坏了。尝试反编译和检查(尽管这是非常罕见的)。
记住所有的classNotFound异常仅仅意味着程序由于任何原因无法找到对应的类。将它添加到lib/类路径中就好了。
同时记住常用的4个commons 公共包:commons-configuration-1.6.jar commm-logging.jar,common-lang.jar和common-collection.jar。
四个包下载地址:http://maven.outofmemory.cn/ 在MAVEN中央仓库里面直接下载。
启动项目时报错: java.sql.SQLException: Access denied for user 'pdpms'@'localhost' (using password: YES)
错误原因:数据库连接失败,数据库连接信息有误
处理方式:检查数据库账号 密码是否正确 检查数据库地址端口是否正确
检查连接的数据库名称是否正确 检查数据库是否开启远程访问权限 检查是否可以Ping通远程地址
启动项目时报错:java.net.ConnectException: Connection timed out: connect
错误原因:数据库连接超时 无法连接到对应IP地址上的数据库
处理方式:检查对应ip地址上是否安装对应数据库,检查ip地址是否变更了。在公司进行开发的时候,电脑是自动获取IP地址,因此IP地址可能会发生变更,建议将数据库机器的ip地址设置为静态,或者使用机器名进行连接。
数据库连接报错:com.mysql.cj.exceptions.InvalidConnectionAttributeException: The server time zone value '???ú±ê×??±??' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.
错误原因:mysql 连接驱动包版本较高 当前使用的是 数据库和系统时区有差异所造成。
处理方式:在jdbc连接的url后面加上serverTimezone=GMT即可解决问题,如果需要使用gmt+8时区,需要写成GMT%2B8,否则会被解析为空。再一个解决办法就是使用低版本的MySQL jdbc驱动,5.1.28不会存在时区的问题。
Springboot 项目报错404 扫描不到对应的controller service dao
问题原因:SpringBoot 官方的推荐是:需要扫描的包应该和启动类同级或者在启动类下面。如下图
在上图中就无法扫描到controller 但是可以扫描到其他和启动类:DemoApplication 同级的包。
处理方式:1 将controller 移动到和controller同级。
2 在controller类上将扫描注解换成:@SpringBootApplication
或者使用@Controller @EnableAutoConfiguration @ComponentScan 这三个可以了
@Controller和@EnableAutoConfiguration没有扫描注解的功能,而@ComponentScan是springboot专门用来扫描@Component, @Service, @Repository, @Controller等注解的注解。
SSM项目报错:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
错误原因:mybatis 配置文件信息有误
处理方式:检查对应的mybatis的mapper配置文件信息。
检查mapper.xml文件所在的package名称是否和interface对应的package名称一一对应。
检查mapper.xml文件的namespace是否和xml文件的package名称一一对应。
检查mapper.xml文件的方法名称能否和接口里面的方法名称对应上。
检查mybatis 是否扫描到对应的mapper.xml文件。
检查mybatis配置文件的配置信息是否正确,在配置多数据源时可能将数据源写错
【spring整合quartz定时任务】Spring @Autowired 注入service或者dao为null
问题原因:quartz 当中的job没有进行实例化 没有被spring自动注入进行管理 同
处理方式:
第一步:创建一个类继承 AdaptableJobFactory 或者 SpringBeanJobFactory
public class JobFactory extends AdaptableJobFactory {
@Autowired
private AutowireCapableBeanFactory capableBeanFactory;
@Override
protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception {
//调用父类的方法
Object jobInstance = super.createJobInstance(bundle);
//进行注入
capableBeanFactory.autowireBean(jobInstance);
return jobInstance;
}
}
PS:继承SpringBeanJobFactory的话 代码块和上面一样。
第二步在xml 当中进行配置
<bean id="bmJobFactory" class="com.jy.task.job.bmTask.JobFactory"></bean>
<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="jobFactory" ref="bmJobFactory"></property>
</bean>
问题就搞定了.
添加时间:2018.08
return null 引发的空指针问题
问题原因:方法的返回类型为集合时,直接返回NULL 导致在判断list 是否为null时一直报空指针异常
list空值判断 list.size()>0 && list!=null 这里调用size()出现空指针异常。
双重判断的原因:
list == null 说明List没有初始化 或者赋值为了null,说明list内没有数据
但是 当list 初始化后 list != null但list内依然没有数据
1、如果直接判断size>0,如果list == null,那程序报空指针的错
2、如果只判断list == null,那list内的数据还是可能为空
解决办法1:在返回时直接声明 return new ArrayList();
解决办法2:更换判断位置 list!=null && list.size()>0;
WEB项目打开某个JSP界面报错:Could not complete request
org.apache.jasper.JasperException:。。。。。。。
问题原因:JSP界面头部的引入信息输入有误,例如:page当中UTF-8写成了小写的,contentType的属性当中有多的空格(我这里就是有多的空格报错的) 引入对应的taglib信息有误等等。
解决办法:找一个没有错的界面头部,直接拷贝过来。
添加日期:2018.09
连接MYSQL数据库报错:
Loading class com.mysql.jdbc.Driver'. This is deprecated. The new driver class is
com.mysql.cj.jdbc.Driver’. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.
问题原因:mysql驱动包的版本和驱动声明不匹配,通常出现在使用了mysql-connector-java-8.0.11.jar这个mysql驱动包。
处理方式:修改连接驱动信息如下 jdbc.driverClassName=com.mysql.cj.jdbc.Driver
springMVC Controller Service Dao 注入问题:
启动项目时提示:Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMapping
以及Ambiguous mapping found. Cannot map 'baseController.hello' bean
问题原因:重复注入,多个bean注入时的注入名一样。
处理方式:1通过全局查找对应bean的注入名称是否重复进行修改 2在继承baseController时 在controller注解当中填上路径。
Hibernate查询报错:org.hibernate.hql.internal.ast.QuerySyntaxException: XXX is not mapped
问题原因:hibernate执行查询的语句hql是面向对象的查询,而不是面向数据库表的查询,因此在hql语句中的对象名必须与实体类的类名一致,严格区分大小写。
处理方式:检查sql语句,例如对应实体类为User 对应表为 t_user 查询sql语句为:select * from User
检查对应的实体类和表的对应关系是否正确,检查数据库当中的表是否存在等等。
数据库连接问题:org.springframework.transaction.CannotCreateTransactionException
问题原因:数据库连接配置问题
处理方式:检查数据库连接是否正确,检查是否有空格什么的。
添加日期 2018.10
错误信息:Property 'configuration' and 'configLocation' can not specified with together
问题原因:spring整合mybatis时同时配置了configuration和config-Location这两个配置信息。在spring的配置文件指定了mybatis的配置文件 就不能在spring的配置里面写入mybatis的配置,所以报错。
处理方式:将spring配置里面写入的mybatis配置去掉。或者不指定mybatis配置文件 就是下面两个2选1
添加日期:2018.11
错误信息:读取utf-8文件时,第一行多出一个字符,怎么都去不掉,并且如果换成其他编码格式文件就没有这个字符。
问题原因:BOM——Byte Order Mark,就是字节序标记。多出来的字符(BOM)就是标记这个文件是UTF-8编码。打开的文件是一个UTF-8 BOM编码类型的文件。
处理方式:将该文件通过NOTPAD++打开,然后在编码当中选择UTF-8编码。
错误信息: Operation not allowed after ResultSet closed
问题原因:在进行JDBC操作数据库连接的时候,获取到ResultSet 对象 但是返回ResultSet 对象之后,就关闭了connection和statment对象。关闭这两个对象会导致ResultSet 对象也被关闭。但是如果不关闭connection和statment对象,又会造成过多连接。
处理方式:如果要返回ResultSet 对象进行操作的话,使用ResultSet 的子类RowSet进行接收。这样关闭connection和statment对象不会影响到RowSet。
添加日期:2019.03
错误信息:springboot项目上线运行一段时间后,上传图片报错。
问题原因:Spring Boot项目在启动后,会生成临时文件夹,上传文件时文件会存在临时文件中; linux系统下长时间不操作,临时文件目录会被删除,上传文件时获取不到文件目录,就会报错
处理方式: 在配置当中指定具体的存储位置然后通过@bean注入。或者在配置文件当中配置server.tomcat.basedir==/usr/local
错误信息:springboot项目添加了websocket后,项目可以正常启动,但是单元测试时,提示websocket错误。
问题原因:Spring Boot项目在测试时默认是模拟的web环境,在进行websocket时需要真实环境。
处理方式: 修改测试的注解为:@SpringBootTest(classes = SellApplication.class, webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT) 表明使用真实的环境进行测试