Архив Декабрь 2018

Восприимчивость Gradle к командной строке

Возникла острая необходимость в ядре для тестов использовать различные БД, и для этого нужно, чтобы gradle передавал конфиг в spingboot. Решение, казалось, лежало на поверхности — использовать параметры командной строки: -Dparameter=value, но как оказалось, это не работает для грэдла (хотя отдельно для исполнения тестов работает).

После гугления нашлось такое решение:

test {
    //https://www.credera.com/blog/technology-insights/java/gradle-profiles-for-multi-project-spring-boot-applications/
    // В аргументах грэдлу передавать через -P
    // -Pproperty.name=value
    // без парамаметров будет браться конфиг из application.properties

    project.ext.applyPropertyIfExists = { propertyKey ->
        if(project.hasProperty(propertyKey)) {
            systemProperties[propertyKey] = project.getProperty(propertyKey)
        }
    }
    applyPropertyIfExists('spring.profiles.active')
    applyPropertyIfExists('spring.datasource.url')
    applyPropertyIfExists('spring.datasource.username')
    applyPropertyIfExists('spring.datasource.password')
}

 

Пока я на испытательном сроке, то прежде чем закомитить, надо показать код сеньору.

Он посмотрел и сказал — норм, но надо сделать проще ))

test {
    //для -Dproperty=value
    systemProperties(System.getProperties())
}
Когда позвали на помощь сеньора.

Маленькое дерево с большой проблемой

Прошло 2 месяца — в Котлине освоился, но React еще доводит до кипения.
На днях случилось: воевал я с новым компонентом от Ant.design — TreeSelect, ну чтобы выбирать значение в дереве. Нарисовал быстро, а как данные загрузить до прорисовки понял не сразу. Выход нашелся, когда уже глаза покраснели — рисовать спин, а загружать в componentDidMount. Все это успешно отладилось на песочнице, но когда доехало в прод, начались дииикие тормоза. А все из-за того, что записей в дереве получилось в 10 раз больше. А как дерево строится? Ну как обычно рекурсией, а это самая медленная из операций — цикл в цикле, а еще вся эта радость крутиться не на сервере, а на клиенте. Поэтому скорость упала не в 10 раз, а в 100.
Короче, я попал на самую распространенную задачу при отображении дерева с большим количеством элементов. Обычная практика — выделился узел, дети подтянулись. Но этот TreeSelect этот принимает на вход только целое дерево и не умеет подгружать узлы по запросу.

В итоге пришлось отказаться от этого компонента, и использовать другой (коллеги подсказали, что есть готовый), который это умеет.
(Вот и всё)х2 )))