Обновление с Grails 2.1.0 до 2.3.7 с помощью тестового приложения postgres не работает

Я продолжаю получать эту ошибку в конце тестового приложения.

Error Error executing script TestApp: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManagerPostProcessor': Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager': Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory': Cannot resolve reference to bean 'lobHandlerDetector' while setting bean property 'lobHandler'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'lobHandlerDetector': Invocation of init method failed; nested exception is org.springframework.jdbc.support.MetaDataAccessException: Error while extracting DatabaseMetaData; nested exception is java.sql.SQLException: Driver:org.postgresql.Driver@997931c returned null for URL:jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000 (Use --stacktrace to see the full trace)

Пытаюсь обновиться с 2.1.0 до 2.3.7. run-app работает нормально, но test-app продолжает ломаться. Вот так выглядит мой dataSource.groovy.

dataSource {
    pooled = true
    driverClassName = "org.postgresql.Driver"
    dialect="org.hibernate.dialect.PostgreSQLDialect"
    username = "username"
    password = "password"
}

hibernate {
    cache.use_second_level_cache = true
    cache.use_query_cache = false
    cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
}
// environment specific settings
environments {
    development {
        dataSource {
//            dbCreate = "create-drop" // one of 'create', 'create-drop', 'update', 'validate', ''
            url = "jdbc:postgresql://localhost/mydb"
        }
    }
    test {
        dataSource {
            dbCreate = "update"
            url = "jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000"
        }
    }
    /*production {
        dataSource {
//            dbCreate = "update"
            url = "jdbc:h2:prodDb;MVCC=TRUE;LOCK_TIMEOUT=10000"
            pooled = true
            properties {
               maxActive = -1
               minEvictableIdleTimeMillis=1800000
               timeBetweenEvictionRunsMillis=1800000
               numTestsPerEvictionRun=3
               testOnBorrow=true
               testWhileIdle=true
               testOnReturn=true
               validationQuery="SELECT 1"
            }
        }
    }*/
}

У меня есть это в моем BuildConfig.groovy в разделе зависимостей.

runtime "org.postgresql:postgresql:9.3-1100-jdbc4"

Занимался со вчерашнего дня. Раньше работало в 2.1.0. У меня есть около 200+ тестов, около 50% из них не пройдены, и в конце сообщения об ошибке есть эта ошибка. Помощь?


person zeitgeist    schedule 23.04.2014    source источник
comment
вы проверили ответы? Я уверен, что в настройках вашего источника данных указано, где найти драйверы H2.   -  person Daniel Adenew    schedule 23.04.2014


Ответы (3)


Ваш URL для test — это база данных h2, поэтому вам следует переместить:

driverClassName = "org.postgresql.Driver"
dialect="org.hibernate.dialect.PostgreSQLDialect"

в ваш источник данных для разработки и добавьте

driverClassName = "org.h2.Driver"

к вашему тестовому источнику данных.

person Michael Legart    schedule 23.04.2014

Я думаю, что вы используете неправильный драйвер для базы данных h2. Попробуйте с:

test {
    dataSource {
        driverClassName = "org.h2.Driver"
        dbCreate = "update"
        url = "jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000"
    }
}
person Fran García    schedule 23.04.2014
comment
Шутки в сторону? Все это время я запускал тестовое приложение, используя один и тот же источник данных в версии 2.1.0, и это никогда не давало мне этого. В любом случае, я беспокоюсь, если я использую другой драйвер, как это повлияет на мои тесты? Например, я знаю, что mysql и postgres в принципе одинаковы, но, вероятно, есть небольшие различия. Я просто хочу протестировать среду, которая намного ближе к psql, потому что это то, что сейчас находится в prod (я не включил это в свой код выше). - person zeitgeist; 23.04.2014
comment
Конечно, я бы посоветовал вам также использовать базу данных postgresql в вашей тестовой среде url = jdbc:postgresql://localhost/mydb4test - person Fran García; 23.04.2014

Попробуйте переключить этот:

dataSource {
    pooled = true
    driverClassName = "org.postgresql.Driver"
    dialect="org.hibernate.dialect.PostgreSQLDialect"
    username = "username"
    password = "password"
}

hibernate {
    cache.use_second_level_cache = true
    cache.use_query_cache = false
    cache.region.factory_class = 'net.sf.ehcache.hibernate.EhCacheRegionFactory'
}
// environment specific settings
environments {
    development {
        dataSource {
//            dbCreate = "create-drop" // one of 'create', 'create-drop', 'update', 'validate', ''
            url = "jdbc:postgresql://localhost/mydb"
        }
    }
    test {
        dataSource { 
        driverClassName = "org.h2.Driver"
        username = "sa"
        password = ""
        pooled = true
        dbCreate = "update"
            url = "jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000"
        }
    }
    /*production {
        }
     */
  }
person Daniel Adenew    schedule 23.04.2014