林小冉丶 2020-05-03 01:59 采纳率: 50%
浏览 109

DBCP转Driud后,启动项目后,登录时报错

原来的DBCP配置:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
            <property name="url" value="#{dbConfig.url}" />
            <property name="username" value="#{dbConfig.username}" />
            <property name="password" value="#{dbConfig.password}" />
            <property name="driverClassName" value="#{dbConfig.driverClassName}" />
        </bean>

pom.xml引入druid1.1.2的包
将原来的DBCP改为Druid

<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="url" value="#{dbConfig.url}" />
        <property name="username" value="#{dbConfig.username}" />
        <property name="password" value="#{dbConfig.password}" />
        <property name="driverClassName" value="#{dbConfig.driverClassName}" />
        <!-- 指定连接数据库连接池的最小连接数 -->
        <property name="minIdle" value="10"></property>
        <!-- 指定连接数据库连接池的最大连接数 -->
        <property name="maxActive" value="120"></property>
        <!--初始化接数据库连接池 -->
        <property name="initialSize" value="2"></property>
        <!-- 指定连接数据库连接池的连接的最大空闲时间 -->
        <property name="maxWait" value="12000"></property>
        <!--配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒。 -->
        <property name="timeBetweenEvictionRunsMillis" value="60000"></property>
        <!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
        <property name="minEvictableIdleTimeMillis" value="300000" />
        <!-- 用来检测连接是否有效的sql,要求是一个查询语句 -->
        <property name="validationQuery" value="SELECT 1 FROM DUAL"></property>
        <!--空闲时是否进行验证,检查对象是否有效 --> 
        <property name="testWhileIdle" value="true" />
        <!--取得对象时是否进行验证,检查对象是否有效 --> 
        <property name="testOnBorrow" value="false" />
         <!--返回对象时是否进行验证 -->  
        <property name="testOnReturn" value="false" />
        <!-- 配置监控统计拦截的filters,去掉后监控界面sql无法统计 -->
        <property name="filters" value="stat" />
        <!-- 长时间不适用的连接强制关闭 -->
        <property name="removeAbandoned" value="true" />
        <!-- 超过30分钟开始关闭空闲连接 -->
        <property name="removeAbandonedTimeout" value="1800" />
    </bean>

以上配置项目可以正常启动

但是,当登录系统时(即第一次请求数据库)项目会报错

### Cause: java.lang.NullPointerException] with root cause
java.lang.NullPointerException
    at com.alibaba.druid.pool.DruidDataSource.getConnectionInternal(DruidDataSource.java:1318)
    at com.alibaba.druid.pool.DruidDataSource.getConnectionDirect(DruidDataSource.java:1155)
    at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:4619)
    at com.alibaba.druid.filter.stat.StatFilter.dataSource_getConnection(StatFilter.java:666)
    at com.alibaba.druid.filter.FilterChainImpl.dataSource_connect(FilterChainImpl.java:4615)
    at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1133)
    at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1125)
    at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:104)
    at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:111)
    at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:77)
    at org.mybatis.spring.transaction.SpringManagedTransaction.openConnection(SpringManagedTransaction.java:82)
    at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:68)
    at org.apache.ibatis.executor.BaseExecutor.getConnection(BaseExecutor.java:271)
    at org.apache.ibatis.executor.SimpleExecutor.prepareStatement(SimpleExecutor.java:69)
    at org.apache.ibatis.executor.SimpleExecutor.doUpdate(SimpleExecutor.java:44)
    at org.apache.ibatis.executor.BaseExecutor.update(BaseExecutor.java:100)
    at org.apache.ibatis.executor.CachingExecutor.update(CachingExecutor.java:75)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.update(DefaultSqlSession.java:148)
    at org.apache.ibatis.session.defaults.DefaultSqlSession.insert(DefaultSqlSession.java:137)
    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:498)
    at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:433)
    at com.sun.proxy.$Proxy23.insert(Unknown Source)
    at org.mybatis.spring.SqlSessionTemplate.insert(SqlSessionTemplate.java:278)
    at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:46)
    at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:43)
    at com.sun.proxy.$Proxy24.insertUserLog(Unknown Source)

现在不知道原因在哪?是连接池没有连接上还是怎么地?如果排错的话应该如何下手呢?

ps:如果在 bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" 中再配置了init-method="init"项目则无法启动,报错;之前DBCP中也没有配置

  • 写回答

1条回答 默认 最新

  • dabocaiqq 2020-05-04 15:09
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 微信会员卡接入微信支付商户号收款
  • ¥15 如何获取烟草零售终端数据
  • ¥15 数学建模招标中位数问题
  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?