0815 学习社区项目笔记

一、@Override爆红

@override一直爆红但不影响启动,原因是编译器版本1.5只支持重写父类方法,不支持实现接口方法,在Project Structure中修改一下Language版本,版本高于1.5即可。

二、springboot连接mysql报错:com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure

第一天晚上写完项目,云服务器没有关,第二天再启动项目时报错。

原因是MySQL连接时,服务器默认的“wait_timeout”是8小时,也就是说一个connection空闲超过8个小时,Mysql将自动断开该connection。connections如果空闲超过8小时,Mysql将其断开,而DBCP连接池并不知道该connection已经失效,如果这时有Client请求connection,DBCP将该失效的Connection提供给Client,将会造成异常。

解决方式一:修改msyql 配置 ,不推荐

解决方式二:保证应用在MySQL的’wait_timeout’时间内,至少访问一次数据库,配置文件增加心跳检测部分

sys.db.initialSize=10
sys.db.maxIdle=50
sys.db.minIdle=5
sys.db.maxActive=50
sys.db.logAbandoned=true
sys.db.removeAbandoned=true
sys.db.removeAbandonedTimeout=120
sys.db.maxWait=60000
sys.db.type=mysql
dialect=MYSQL
sys.db.class=com.mysql.jdbc.Driver

sys.db.url=jdbc:mysql://localhost:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8
sys.db.username=root
sys.db.password=123456

# 28800 8小时

# 21600 6小时

show variables like '%timeout%';

SET GLOBAL wait_timeout=21600;

SET wait_timeout=21600;

SHOW GLOBAL VARIABLES LIKE 'wait_timeout';

SHOW VARIABLES LIKE 'wait_timeout';

SET GLOBAL interactive_timeout=58800;

SET interactive_timeout=58800;

SHOW GLOBAL VARIABLES LIKE 'interactive_timeout';

SHOW VARIABLES LIKE 'interactive_timeout';

连接池内连接的生存周期(idleConnectionTestPeriod)小于数据库中的wait_timeout的值

解决方式二:保证应用在MySQL的'wait_timeout'时间内,至少访问一次数据库,配置文件增加心跳检测部分

timeBetweenEvictionRunsMillis: 20800 # 配置间隔多久才进行一次检测 原值 :60000 改小与timeout时间.

idleConnectionTestPeriod: 20800 # 连接池内连接的生存周期(idleConnectionTestPeriod)小于数据库中的wait_timeout的值

minEvictableIdleTimeMillis: 18000000 # 1000 * 60 * 30 =18000000 (默认值) 连接在池中保持空闲而不被空闲连接回收器线程,(如果有)回收的最小时间值,单位毫秒

durid配置:

timeBetweenEvictionRunsMillis: 20800 # 配置间隔多久才进行一次检测 原值 :60000 改小与timeout时间.

idleConnectionTestPeriod: 20800 # 连接池内连接的生存周期(idleConnectionTestPeriod)小于数据库中的wait_timeout的值

minEvictableIdleTimeMillis: 18000000 # 1000 * 60 * 30 =18000000 (默认值) 连接在池中保持空闲而不被空闲连接回收器线程,(如果有)回收的最小时间值,单位毫秒

<!-- 数据源定义 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${sys.db.class}"/>
        <property name="url" value="${sys.db.url}"/>
        <property name="username" value="${sys.db.username}"/>
        <property name="password" value="${sys.db.password}"/> 
        <property name="initialSize" value="${sys.db.initialSize}"/><!-- 初始化连接 -->
        <property name="maxIdle" value="${sys.db.maxIdle}"/><!-- 最大空闲连接 -->
        <property name="minIdle" value="${sys.db.minIdle}"/><!-- 最小空闲连接 -->
        <property name="maxActive" value="${sys.db.maxActive}"/><!-- 最大连接数量 -->
        <property name="logAbandoned" value="${sys.db.logAbandoned}"/><!-- 是否在自动回收超时连接的时候打印连接的超时错误 -->
        <property name="removeAbandoned" value="${sys.db.removeAbandoned}"/><!-- 是否自动回收超时连接 -->
        <property name="removeAbandonedTimeout" value="${sys.db.removeAbandonedTimeout}"/><!-- 超时时间(以秒数为单位) -->
        <property name="maxWait" value="${sys.db.maxWait}"/><!-- 超时等待时间以毫秒为单位 6000毫秒/1000等于60秒 -->
        
        
        <!-- sql 心跳检测 -->
        <property name= "testWhileIdle" ><value>true</value></property><!-- 起了一个 异步Evict的TimerTask定时线程进行控制 定时对线程池中的链接进行validateObject校验,对无效的链接进行关闭后,会调用ensureMinIdle,适当建立链接保证最小的minIdle连接数 -->
        <property name= "testOnBorrow" ><value>false</value></property><!-- 在进行borrowObject进行处理时,对拿到的connection进行validateObject校验 -->
        <property name= "testOnReturn" ><value>false</value></property><!-- 进行returnObject对返回的connection进行validateObject校验 -->
        <property name= "validationQuery" ><value>select 1</value></property><!-- 代表检查的sql -->
        <property name= "validationQueryTimeout" ><value>1</value></property><!-- 代表在执行检查时,通过statement设置,statement.setQueryTimeout(validationQueryTimeout) -->
        <property name= "timeBetweenEvictionRunsMillis" ><value>28700</value></property><!-- 设置的Evict线程的时间,多久检查一次,建议小于mysql默认时间默认的8小时(即 28800秒),单位ms,大于0才会开启evict检查线程 -->
        <property name= "numTestsPerEvictionRun" ><value>${sys.db.maxActive}</value></property><!-- 代表每次检查链接的数量,建议设置和maxActive一样大,这样每次可以有效检查所有的链接. -->
        <property name= "minEvictableIdleTimeMillis"><value>18000000</value></property><!--  -->
        
    </bean>

三、cause: java.lang.classnotfoundexception: cannot find class:

问题描述

java.lang.ClassNotFoundException是Java运行时异常的一种,表示在运行期间试图加载类时,JVM没有找到该类的定义。

问题原因

Java程序在运行时需要加载各种类文件,如果找不到应该加载的类文件,就会抛出java.lang.ClassNotFoundException异常。最常见的原因是类路径(classpath)设置错误,例如未将类文件放置在classpath能够访问的位置,或classpath设置不正确,导致JVM无法找到类文件。如果类文件所在的jar包文件缺失或损坏,也会导致该异常。

解决:

xml文件里一个resultType引用对象的路径写错了,检查了很久。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值