Ответ 1
task local {
run { systemProperty "spring.profiles.active", "local" }
}
bootRun.mustRunAfter local
Затем запустите команду gradle как:
gradle bootRun local
Я использую плагин gradle spring-boot
, и мне нужно выбрать активный профиль spring для тестового прогона.
Как передать системное свойство spring.profiles.active
в задачу плагина bootRun
?
Что уже не удалось:
task bootRunLocal {
systemProperty "spring.profiles.active", "local"
System.setProperty("spring.profiles.active", "local")
tasks.bootRun.execute() // I suspect that this task is executed in a separate JVM
}
и некоторая магия командной строки также не выполняется:
./gradle -Dspring.profiles.active=local bootRun
Может ли кто-нибудь помочь мне решить мои проблемы?
Обновление ответов и комментариев:
Я могу установить systemProperty и передать его в контейнер spring, выполнив:
run {
systemProperty "spring.profiles.active", "local"
}
Однако, когда я это делаю, локальный профиль устанавливается для задачи bootRun
и bootRunLocal
. Мне нужно установить это свойство для задачи bootRunLocal
и вызвать задачу booRun
из bootRunLocal
.
Это может показаться очень простым, но я прихожу с миром из структурированного мира Maven.
task local {
run { systemProperty "spring.profiles.active", "local" }
}
bootRun.mustRunAfter local
Затем запустите команду gradle как:
gradle bootRun local
Я знаю, что я опаздываю здесь... но я недавно столкнулся с этой точной проблемой. Я пытался запустить bootRun с параметрами spring.profiles.active и spring.config.location как системные свойства в командной строке.
Итак, чтобы заставить вашу командную строку "магия" работать, просто добавьте ее в свой build.gradle
bootRun {
systemProperties System.properties
}
Затем выполняется из командной строки...
gradle -Dspring.profiles.active=local bootRun
Будет устанавливать локальный как активный профиль, без необходимости определять отдельную задачу просто для добавления переменной env.
Нет общего способа передать свойства системы задаче. В двух словах он поддерживается только для задач, которые разворачивают отдельную JVM.
Задача bootRunLocal
(как определено выше) не будет выполняться в отдельной JVM, а вызов execute()
в задаче не поддерживается (и должен произойти на этапе выполнения в любом случае). С другой стороны, тесты выполняются в отдельной JVM (если выполняется задачей Test
). Чтобы установить системные свойства для выполнения теста, вам необходимо настроить соответствующие задачи Test
. Например:
test {
systemProperty "spring.profiles.active", "local"
}
Для получения дополнительной информации см. Test
в Gradle Справочник по языку сборки.
Для gradle 2.14 ниже пример работает.
Я добавил, как показано ниже.
Когда System.properties ['spring.profiles.active'] равно null, тогда задан профиль по умолчанию.
bootRun {
systemProperty 'spring.profiles.active', System.properties['spring.profiles.active']
}
пример командной строки
gradle bootRun -Dspring.profiles.active=dev
Просто для справки, если у кого-то будет эта проблема:
Ответ Влада не совсем сработал у меня, но он отлично работает с 2.4,
task local <<{
bootRun { systemProperty "spring.profiles.active", "local" }
}
local.finalizedBy bootRun
тогда gradle local
SPRING_PROFILES_ACTIVE=local gradle clean bootRun
Вы можете создать новую задачу (в обсуждаемом случае с именем bootRunLocal
), которая расширила бы org.springframework.boot.gradle.run.BootRunTask
и установила свойства перед выполнением задачи. Вы можете создать такую задачу с помощью следующего кода:
task bootRunLocal(type: org.springframework.boot.gradle.run.BootRunTask) {
doFirst() {
main = project.mainClassName
classpath = sourceSets.main.runtimeClasspath
systemProperty "spring.profiles.active", "local"
}
}
Более подробную информацию можно найти здесь: https://karolkalinski.github.io/gradle-task-that-runs-spring-boot-aplication-with-profile-activated/
Отвечая на точный запрос OP здесь...
Как передать spring.profiles.активное системное свойство в задачу плагина bootRun?
И если предположить, что "pass" OP означает "перейти от командной строки" или "перейти от вызова IDE"... Вот как мне это нравится.
Добавьте это в build.gradle:
/**
* Task from spring-boot-gradle-plugin, configured for easier development
*/
bootRun {
/* Lets you pick Spring Boot profile by system properties, e.g. gradle bootRun -Dspring.profiles.active=dev */
systemProperties = System.properties
}
Затем, когда вы вызываете его, используйте знакомый флаг Java для установки системного свойства
gradle bootRun -Dspring.profiles.active=local
Существует одно главное преимущество использования свойств системы, опции переменных окружения (SPRING_PROFILES_ACTIVE=local gradle bootRun
)... и эта простая переносимость между Linux/OS X (bash и т.д.) и Windows (cmd.exe в любом случае).
Я узнал этот путь из этого сообщения в блоге.
(ОБНОВЛЕНИЕ: Ах, как-то я пропустил ответ @Erich с той же рекомендацией. К сожалению, я оставляю свой ответ из-за дополнительных сведений о переносимости и т.д.)
Это работает:
SPRING_PROFILES_ACTIVE = production./gradlew app-service: bootRun
Начиная с SpringBoot 2.0.0-M5 setSystemProperties()
больше не является методом задачи bootRun.
Build.gradle необходимо обновить до
bootRun {
execSpec {
// System.properties["spring.profiles.active"]
systemProperties System.properties
}
}
В этом случае задача запуска SpringBoot использует org.gradle.process.JavaExecSpec
Это работает для меня, используя Gradle 4.2
с командой запуска, которую вы можете добавить в файл сборки run { systemProperties = System.properties }
и начать с gradle run -Dspring.profiles.active=local