Трудно сказать, что происходит с ограниченным кодом, который вы предоставляете, но есть некоторые вещи, которые нужно проверить.Служба внедряется в контроллер с полем области видимости «def plainSqlService», как у вас здесь для dataSource, или вы вызываете new PlainSqlService()
?Если вы создаете новый экземпляр, bean-компонент dataSource не будет внедрен, и конструктор groovy.sql.Sql не завершится с ошибкой, но запросы будут.
Одна вещь, которую нужно попробовать, - grails clean
что-то вроде этого, которое должно работать, не работает, часто помогает полная перекомпиляция.
Один важный, но не связанный с этим момент - вы никогда не должны использовать Closures в сервисах.Контроллеры и библиотеки тегов требуют, чтобы действия и теги были реализованы с помощью Closure, но служба - это просто bean-компонент Spring, определенный в Groovy.Spring ничего не знает о Closures, и, поскольку они являются просто полем, которое Groovy выполняет, как если бы это был метод, любое проксирование, которое вы ожидаете от Spring (в частности, поведение транзакций, но также безопасность и другие функции), не произойдет, поскольку Springищет только методы.
Так что newNum
должен быть объявлен как:
def newNum() {
...
}