zoukankan      html  css  js  c++  java
  • java.lang.NumberFormatException: For input string: "${jdbc.maxActive}"

    一、问题

    使用SpringMVC和MyBatis整合,将jdbc配置隔离出来的时候出现下面的错误,百度了很久没有找到解决方法,回家谷歌下,就找到解决方法了,不得不说谷歌就是强大,不废话,下面是具体的错误:

    Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mySqlDataSource' defined in ServletContext resource [/WEB-INF/classes/config/spring/daoSource.xml]: Initialization of bean failed; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert property value of type [java.lang.String] to required type [int] for property 'maxActive'; nested exception is java.lang.NumberFormatException: For input string: "${jdbc.maxActive}"
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
        at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:351)
        ... 41 more
    Caused by: org.springframework.beans.TypeMismatchException: Failed to convert property value of type [java.lang.String] to required type [int] for property 'maxActive'; nested exception is java.lang.NumberFormatException: For input string: "${jdbc.maxActive}"
        at org.springframework.beans.AbstractNestablePropertyAccessor.convertIfNecessary(AbstractNestablePropertyAccessor.java:596)
        at org.springframework.beans.AbstractNestablePropertyAccessor.convertForProperty(AbstractNestablePropertyAccessor.java:603)
        at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:216)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.convertForProperty(AbstractAutowireCapableBeanFactory.java:1527)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1486)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1226)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543)
        ... 47 more
    Caused by: java.lang.NumberFormatException: For input string: "${jdbc.maxActive}"
        at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
        at java.lang.Integer.parseInt(Integer.java:569)
        at java.lang.Integer.valueOf(Integer.java:766)
        at org.springframework.util.NumberUtils.parseNumber(NumberUtils.java:208)
        at org.springframework.beans.propertyeditors.CustomNumberEditor.setAsText(CustomNumberEditor.java:113)
        at org.springframework.beans.TypeConverterDelegate.doConvertTextValue(TypeConverterDelegate.java:468)
        at org.springframework.beans.TypeConverterDelegate.doConvertValue(TypeConverterDelegate.java:441)
        at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:199)
        at org.springframework.beans.AbstractNestablePropertyAccessor.convertIfNecessary(AbstractNestablePropertyAccessor.java:576)
        ... 53 more

     二、出现原因

      这个问题是无法识别占位符,就是在加载过程中直接把 ${jdbc.maxActive }当做字符串处理了。myabatis使用MapperScannerConfigurer扫描模式后他会优先于PropertyPlaceholderConfigurer执行,所以这个时候,${jdbc.maxActive }还没有被properties文件里面的值所替换,就出现TypeMismatchException,然后就异常了。

    三、解决方法

        <!-- 配置sqlSessionFactory -->
        <bean id="mysqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="mySqlDataSource" />
             <property name="configLocation" value="/WEB-INF/classes/config/db/mybatis-config.xml" />
            <property name="mapperLocations">
                <list>
                    <value>classpath:com/xsjt/dao/**/*Mapper.xml</value>
                </list>
            </property>
        </bean>
    
         <!-- DAO接口所在包名,Spring会自动查找其下的类 -->
         <bean name="mysqlMapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <property name="annotationClass" value="org.springframework.stereotype.Repository" />
            <property name="basePackage" value="com.rxwx.dao" />
            <!-- 这里 用sqlSessionFactoryBeanName,而不是sqlSessionFactory,接下来用value而不是ref -->
            <property name="sqlSessionFactoryBeanName" value="masterSqlSessionFactory" />
        </bean>

    MapperScannerConfigurer扫描Dao的 配置中要使用sqlSessionFactoryBeanName,而不是sqlSessionFactory,接下来用value而不是ref。

  • 相关阅读:
    面试高频题:讲讲项目中的技术难点?
    看完本文还不会安装mysql吗?
    spring中如何向一个单例bean中注入非单例bean
    一次性讲清楚spring中bean的生命周期之三:bean是如何实例化的
    java面试一日一题:字节java后端工程师面试题
    VMware 安装 Centos 7 虚拟机配置网络
    基于 Blazor 打造一款实时字幕
    MVP on Board 没用小技巧 👌
    数据治理实践:元数据管理架构的演变
    Apache Superset1.2.0教程(四)—— CentOS环境安装
  • 原文地址:https://www.cnblogs.com/xbq8080/p/8111230.html
Copyright © 2011-2022 走看看