0
votes

Comment passer Spring.Config.Location = "Quelquepath" Tout en construisant une application de démarrage à ressort avec la générale de ligne de commande (6.4)

J'ai une application Springboot où j'ai Application.Properties Fichier en dehors du projet (ce n'est pas dans un endroit habituel SRC / Main / Ressources). Tandis que Construire une application avec gradle Clean Build code>, il échoue à mesure que le code n'est pas capable de trouver des fichiers de propriétés. J'ai essayé de nombreuses commandes à transmettre VM args, gradlé OPTS, mais cela ne fonctionne pas.

gradle clean build -Djvmargs="-Dspring.config.location=/users/home/dev/application.properties" //not working


0 commentaires

3 Réponses :


1
votes

Si j'étais vous, je n'aurais pas impliqué les propriétés réelles au test Junit. Donc, je créerais des propriétés de test pour le projet sous src / test / ressources / applications-test.properties et dans le test JUnit, je chargerais les propriétés de test.

Exemple: xxx


5 commentaires

Je ne peux pas avoir de fichiers de propriétés à l'intérieur du projet. C'est un repo séparé contenant des fichiers de propriétés d'application. Avoir également différents fichiers de propriétés pour le test le dupliqueraient.


Pouvez-vous essayer la commande suivante à votre projet gradle propre build -dspring.config.location = / users / home / dev / application.propert ies


Peut-être que ce poste vous aidera à réussir Application.Property externe Stackoverflow.com/a/52099774/13167832


J'avais déjà essayé cela. Ça ne marche pas. J'ai besoin de "construire" de ne pas "bootrun".


Si rien ne fonctionne, je suppose que je dois créer différents fichiers de configuration pour le test JUnit comme suggéré par @ NIKOB-BOB



0
votes

Je pense qu'il y a un malentendu.

printemps.config.location est utilisé à l'exécution h1>

comme vous validez: p>

Java -Jar Api.jar - -spring.config.location = fichier: /users/home/dev/applylication.properties code> p>

printemps.config.location strong> est utilisé ou requis au moment de l'exécution, pas au moment de la construction. strong> p>

Lorsque votre application de démarrage à ressort construit, une application applications.properties forte> est requise. Une approche pourrait être utilisée un SRC / Main / Ressources / Application.Property Strong> avec des valeurs de modèle, mais à l'exécution, vous l'ignorerez Spring.config.location = fichier ... code> p>

pour les tests d'unité h1>

Dans ce cas, comme @ Nikos-Bob a dit, vous devez utiliser une autre propriété, couramment à l'intérieur de votre SRC / Test / Ressources Code>

variables d'environnement à la place des propriétés externes h1>

Nous ne voulons pas avoir de valeurs codées dans notre référentiel git principal SRC / Main / Ressources / Application.Properties strong> La première idée utilise une propriété externe. Mais ce fichier doit être stocké dans un autre référentiel git (référentiel principal) ou créé manuellement. P>

printemps et autres cadres nous donnent une alternative: Utiliser des variables d'environnement strong>. P >

Donc, au lieu de la création manuelle externe de Application.Properties forte> ou stockez-la dans notre référentiel GIT, votre application de démarrage de printemps doit toujours avoir une application applicable.properties forte> mais avec l'environnement Variables: P>

spring.datasource.url=jdbc:oracle:thin:@${DATABASE_HOST}:${DATABASE_PORT}:${DATABASE_SID}
spring.datasource.username=${DATABASE_USER}
spring.datasource.password=${DATABASE_PASSWORD}
spring.mail.host = ${MAIL_HOST}
spring.mail.username =${MAIL_USERNAME}
spring.mail.password =${MAIL_PASSWORD}
  • Pas de création manuelle d'applications.Proporties nous permettant une automation plus facile Devops Li>
  • non printemps.config.location = fichier .. strong> est requis li> ul> p>


3 commentaires

Merci pour vos intrants. Sur l'application.Propertoires N'EST PAS UTILISÉ SUR LE TEMPS DE BUREAU, si je mettez l'application.Properties Fichier à SRC / Main / Ressources, OUVERTURE DE BAILLE NETTOYEZ. Mais si je ne l'ai pas dans le dossier Ressources, puis nommez la construction propre. Cela signifie au moment de la construction des fichiers d'application.Properties. C'est en fait la façon dont nous avons écrit le cas de test. Comme je l'ai dit à la phase de test, il démarre l'application. Mais la question est de savoir comment spécifier un fichier de configuration externe afin que la construction de gradle Clean Build fonctionne. Peut-être que nous ne pouvons pas spécifier Spring.Config.Location = fichier à la hauteur de la construction, que ce que je vais déterminer.


Qu'en est-il d'une propriété avec des valeurs factices telles que mot de passe = changeme juste pour la construction. Pour votre problème de test, si vous codez un référentiel minimal à Github, je peux peut-être essayer de reproduire. Êtes-vous dans Windows?


Comme mentionné par vous et @ Nikos-Bob, si je crée un fichier de propérisse différent pour le test et que vous l'utilisez dans Test, puis la construction fonctionne bien. Je l'ai testé. Il semble donc que je puisse aller avec cette approche. Mais cela aurait été parfait si je pouvais simplement spécifier le chemin de configuration du fichier de configuration pour la ligne de commande gradle dans la ligne de commande ou dire dans le fichier Build.Gradle. Et mon code est en société Hébergé Git Repo.



1
votes

Les propriétés du système pour les grades en cours d'exécution ne sont pas automatiquement transmises au cadre de test. Je suppose que cela consiste à isoler les tests autant que possible, de sorte que les différences dans l'environnement ne conduiront pas à des différences dans le résultat, sauf configuration explicite de cette façon.

Si vous regardez l'API de gradle pour le Testez la tâche , vous pouvez voir que vous pouvez configurer les propriétés du système Grâce à la méthode systemproperty sur la tâche (groovy dsl): xxx

si vous souhaitez également lire une propriété système à partir de la ligne de commande des grades et puis transmettez-le que le test, vous devez la lire de la gradle en premier, par exemple En tant que propriété de projet, puis transmettez cette valeur sur le test: xxx

exécutez avec gradle -pestconfig = "/ chemin / à la configuration / à la configuration / à la configuration / référentiel /application.properties "Catégorie

Cependant, je découragerais à l'aide des propriétés du système sur la ligne de commande de construction si vous pouvez l'éviter. À tout le moins, cela vous dérangera grandement à long terme. Si le fichier de configuration peut être dans des endroits différents sur différentes machines (selon l'endroit où vous avez le référentiel et s'il n'est pas dans le même chemin relatif de votre référentiel de démarrage à ressort), vous pouvez le spécifier dans un gradle.properties fichier à la place.


1 commentaires

Grande solution, ça a fonctionné. Exactement ce que je cherchais. Merci Bjorn vester.