BoneCP иногда не может получить конфигурацию от держателя свойства Spring

Я уже некоторое время сталкиваюсь с этой проблемой. Моя конфигурация следующая

<!-- Load Properties Files -->
<context:property-placeholder location="classpath:*-${environment}.properties" ignore-unresolvable="true"/>

<bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource" destroy-method="close">
        <property name="driverClass" value="${jdbc.driverClassName}" />
        <property name="jdbcUrl" value="${jdbc.url}" />
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="idleConnectionTestPeriodInMinutes" value="${boneCP.idleConnectionTestPeriodInMinutes}"/>
        <property name="idleMaxAgeInMinutes" value="${boneCP.idleMaxAgeInMinutes}"/>
        <property name="maxConnectionsPerPartition" value="${boneCP.maxConnectionsPerPartition}"/>
        <property name="minConnectionsPerPartition" value="${boneCP.minConnectionsPerPartition}"/>
        <property name="partitionCount" value="${boneCP.partitionCount}"/>
        <property name="acquireIncrement" value="${boneCP.acquireIncrement}"/>
        <property name="statementsCacheSize" value="${boneCP.statementsCacheSize}"/>
        <property name="lazyInit" value="true"/>
        <property name="maxConnectionAgeInSeconds" value="${boneCP.maxConnectionAgeInSeconds}"/>
</bean>

Проект работает на Tomcat 7.

На локальном компьютере проект развертывается без ошибок, как и на сервере разработки. К сожалению, проект больше не может быть развернут на сервере разработки (конфигурация сервера остается прежней), пока локальная машина все еще в порядке. Каждый раз, когда я развертываю проект на сервере разработки, Tomcat просто зависает на INFO: развертывание архива веб-приложений /etc/tomcat/webapps/project.war. Но если я настрою BoneCP с реальными значениями, все в порядке.

Может ли кто-нибудь сказать мне, что с ним не так?


Это оказалось проблемой lazyInit. Если я закомментирую это, сервер может запуститься нормально. Но теперь я столкнулся с новой проблемой. Mybatis вообще не может получить доступ к базе данных, в то время как локальная машина на 100% в порядке. и все же не бросайте никаких исключений. Но когда я останавливаю сервер, я обнаружил следующие исключения

INFO: Illegal access: this web application instance has been stopped already.  Could not load com.jolbox.bonecp.PoolUtil.  The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
java.lang.IllegalStateException
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1600)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
    at com.jolbox.bonecp.DefaultConnectionStrategy.getConnectionInternal(DefaultConnectionStrategy.java:94)
    at com.jolbox.bonecp.AbstractConnectionStrategy.getConnection(AbstractConnectionStrategy.java:90)
    at com.jolbox.bonecp.BoneCP.getConnection(BoneCP.java:540)
    at com.jolbox.bonecp.BoneCPDataSource.getConnection(BoneCPDataSource.java:131)
    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:80)
    at org.mybatis.spring.transaction.SpringManagedTransaction.getConnection(SpringManagedTransaction.java:66)

И

INFO: Illegal access: this web application instance has been stopped already.  Could not load org.apache.ibatis.reflection.ExceptionUtil.  The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
java.lang.IllegalStateException
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1600)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
    at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:363)
    at sun.proxy.$Proxy15.selectList(Unknown Source)
    at org.mybatis.spring.SqlSessionTemplate.selectList(SqlSessionTemplate.java:195)
    at org.apache.ibatis.binding.MapperMethod.executeForMany(MapperMethod.java:124)
    at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:90)
    at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:40)
    at sun.proxy.$Proxy45.selectByExample(Unknown Source)

person eviljan    schedule 07.02.2013    source источник


Ответы (1)


Ну может быть много чего, но скорее всего

  1. свойства не заменяются значениями, которые вы думаете
  2. превышено количество подключений к базе данных или указан неправильный хост
  3. Комбинация 1 + 2

Для № 1 я бы сделал отдельный компонент, которому требуется com.jolbox.bonecp.BoneCPDataSource в качестве зависимости, и распечатал бы геттеры BoneCPDataSource.

Для # 2 я бы включил как можно больше журналов (см. log4j или logback или что-то еще, что у вас есть).

person Adam Gent    schedule 07.02.2013