Во время обработки запроса мне нужно загрузить много сущностей (двух видов). Может быть, 4 или 5 тысяч. Большинство из них обслуживаются из кэша 2-го уровня. Проблема заключается в инжекции зависимостей, которая применяется к каждому классу домена, убивающему производительность приложения.
Профилировщик показывает, что узким местом является org.codehaus.отличный.Граали.Плагины.сеть.прикладной программный интерфейс.ControllersDomainBindingApi.autowire который вызывает GrailsMetaClassUtils.invokeMethodIfExists.
Я попытался загрузить сущности из контроллера и из классов обслуживания. Результаты те же.
Можно ли отключить эту ненужную функцию DI для конкретного случая или класса?
Моя версия Grails 2.3.11 .
Java 1.8
Вы пытались использовать явно ленивое извлечение или пакетное извлечение? Вы можете проверить примеры и дальнейшие пояснения на официальных документах .
при этом, как правило, лучше хранить в памяти только идентификаторы таких больших наборов и загружать их один за другим при их обработке (во избежание возможных несоответствий, которые могут возникнуть между получением объектов и их обработкой)
Можно отключить инъекцию зависимостей в более новых версиях Grails со следующей конфигурацией в
grails-app/conf/runtime.groovy
(для Grails 3) илиgrails-app/conf/Config.groovy
(для Grails 2 с помощью GORM 5/6):