2016-08-24 4 views
0

Я обновляю приложение Grails от версии 2.0 до 2.5.4 и сталкиваюсь с NullPointerException, поскольку dataSource имеет значение null. Этот код отлично работал в версии Grails версии 1.3, 2.0, но не в версии 2.5. Ниже приведен код:Обновление версии Grails 2.5 - dataSource is null

resources.groovy

import org.springframework.jdbc.core.JdbcTemplate 
... 
jdbcTemplate(JdbcTemplate) { 
    dataSource = ref('dataSource') 
... 
} 

DataSource.groovy

dataSource { 
    configClass = GrailsAnnotationConfiguration.class 
    pooled = true 
    autoreconnect= true 
} 

hibernate { 
    generate_statistics=true 
    cache.use_second_level_cache=true 
    cache.use_query_cache=true 
    cache.region.factory_class = 'org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory' 

} 


environments { 
    development { 
     dataSource { 
     driverClassName = "com.mysql.jdbc.Driver" 
     username = "test" 
     password = "test" 
     dbCreate = "update" // one of 'create', 'create-drop','update' 
     pooled = true 
     jmxExport = true 
     url = "jdbc:mysql://host:port/dbName?autoReconnect=true" 
    } 
} 


} 

Класс обслуживания

def jdbcTemplate 

def someMethod(){ 
    jdbcTemplate.queryForList(somequery) 
} 

Исключение: Не удается вызвать метод queryForList() на нуль объект. StackTrace следующим образом: сообщение: Не удается вызвать метод queryForList() на нулевой объект

Отредактировано: несколько замечаний: 1. Db opetaions как DomainClass.list() работают нормально, данные извлекаются из БД 2. Защиту jdbcTemple - Экземпляр jdbTemplate создается в классе BootStrap.groovy, но он недействителен в классах обслуживания и контроллера

ответ

0

Ваш источник данных инкапсулирован в блок окружения.

grails run-app //this runs in development environment mode 

grails run-war //this runs in production environment mode 

Пожалуйста, проверьте, какая среда используется во время работы (см. Журналы).

+0

Да, я запускаю приложение grails run-app, и оно выполняется в среде разработки, а также пыталось поместить те же данные dev db во все среды, но с той же ошибкой. – nshweta

+0

@nshweta Чувствуйте себя как ошибка, поднимите свою проблему на https://github.com/grails/grails-core/issues с воспроизводимым футляром. Если вы хотите посмотреть, что происходит, установите уровень журнала для отладки/информации и посмотрите, не вызвала ли весна какая-либо ошибка при создании компонента. – Raviteja

0

Исправлена ​​ошибка: один из методов, вызываемых с контроллера, был помечен как закрытый (это старый код, написанный до двух лет, он отлично работал с более ранними версиями Grails/Groovy). С Grails версии 2.5 и Groovy 2.4 это не разрешено. Тем не менее, ошибка, которую она давала, не была найдена не методом, но он говорил, что источник данных, который был в методе, был нулевым.

 Смежные вопросы

  • Нет связанных вопросов^_^