Проблема производительности Grails

Во время обработки запроса мне нужно загрузить много сущностей (двух видов). Может быть, 4 или 5 тысяч. Большинство из них обслуживаются из кэша 2-го уровня. Проблема заключается в инжекции зависимостей, которая применяется к каждому классу домена, убивающему производительность приложения.

Профилировщик показывает, что узким местом является org.codehaus.отличный.Граали.Плагины.сеть.прикладной программный интерфейс.ControllersDomainBindingApi.autowire который вызывает GrailsMetaClassUtils.invokeMethodIfExists.

Я попытался загрузить сущности из контроллера и из классов обслуживания. Результаты те же.

Можно ли отключить эту ненужную функцию DI для конкретного случая или класса?

Моя версия Grails 2.3.11 .

Java 1.8

2 ответа

  1. Вы пытались использовать явно ленивое извлечение или пакетное извлечение? Вы можете проверить примеры и дальнейшие пояснения на официальных документах .

    при этом, как правило, лучше хранить в памяти только идентификаторы таких больших наборов и загружать их один за другим при их обработке (во избежание возможных несоответствий, которые могут возникнуть между получением объектов и их обработкой)

  2. Можно отключить инъекцию зависимостей в более новых версиях Grails со следующей конфигурацией в grails-app/conf/runtime.groovy(для Grails 3) или grails-app/conf/Config.groovy(для Grails 2 с помощью GORM 5/6):

    grails.gorm.default.mapping = {
         autowire false
    }