`
QING____
  • 浏览: 2231902 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Tomcat-jdbc + Spring启动错误“Layered pools are not allowed”解决

 
阅读更多

    最近基于SpringMVC项目 + tomat-jdbc配置数据库源,启动抛出:

PropertyAccessException 1: org.springframework.beans.MethodInvocationException: Property 'dataSource' threw exception; nested exception is java.lang.IllegalArgumentException: Layered pools are not allowed.

 

    这个错误,徘徊了很久,分析配置文件没有发现问题,经过源码分析得知解决办法,主要是原因引入在org.apache.tomcat.jdbc.pool.PoolProperties类中:

    @Override
    public void setDataSource(Object ds) {
        if (ds instanceof DataSourceProxy) {
            throw new IllegalArgumentException("Layered pools are not allowed.");
        }
        this.dataSource = ds;
    }

    这个setDataSource方法会与Spring的依赖注入方式“byName”有些冲突。正常情况下,我们的SpringBean的名称不能出现“dataSource”同名id,否则会上述方法的依赖注入时执行。修改方式为:

 

    <!-- 此处id值不能为"dataSource",可以换成任意其他名称 -->
    <bean id="datasource" class="org.apache.tomcat.jdbc.pool.DataSource">
        <property name="driverClassName" value="com.mysql.jdbc.ReplicationDriver"></property>
        ....
    </bean>

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics