2017-10-07 5 views
0

Je développe un projet Spring. Je voudrais charger les informations d'identification à partir de la ligne de commande ne pas les raconter dans le code. Je suis en train d'exécuter cette commande gradleImpossible de passer l'argument de la ligne de commande gradle au projet Spring (pas Boot)

gradlew build -Dspring.datasource.username=tester 

et quand je démarre le projet de printemps, le programme arrête sur un point d'arrêt et je vois si variable est déclarée ou non. J'ai essayé d'utiliser -P au lieu de -D mais cela n'a toujours pas aidé.

Je déploie l'application de printemps à distance en utilisant bmuschko plugin que j'ai essayé d'utiliser, mais aussi sans succès. J'ai vérifié dans les propriétés du code java en utilisant System.getProperties() et l'objet Environment supporté par Spring.

gradlew cargoredeployremote -Dspring.datasource.username=tester 

Les propriétés d'application sont chargées avec succès.

IMPORTANT: J'ai vu de nombreux didacticiels sur la façon de le faire, mais en utilisant Spring Boot, je n'utilise que des composants sélectionnés de Spring. Par exemple: http://nixmash.com/post/passing-arguments-to-spring-boot - cela ne fonctionne pas dans mon cas car je n'ai pas de tâche bootRun.

Des idées? Est-ce que je manque quelque chose dans mes pas?

Voici mon build.gradle

group 'example' 
version '1.0.0' 


apply plugin: 'application' 
apply plugin: 'war' 
apply plugin: 'java' 
apply plugin: 'com.bmuschko.cargo' 
apply plugin: 'org.liquibase.gradle' 

compileJava.options.encoding = 'UTF-8' 

mainClassName = 'api.optic.config.WebAppInitializer' 
sourceCompatibility = 1.8 

buildscript { 
    repositories{ 
     jcenter() 
     mavenCentral() 
    } 
    dependencies{ 
     classpath 'com.bmuschko:gradle-cargo-plugin:2.2.3' 
     classpath 'org.junit.platform:junit-platform-gradle-plugin:1.0.0-RC3' 
     classpath 'org.liquibase:liquibase-core:3.4.1' 
     classpath "org.liquibase:liquibase-gradle-plugin:1.2.4" 
     classpath "mysql:mysql-connector-java:5.1.13" 
    } 
} 

project.ext { 
    springVersion = "4.3.6.RELEASE" 
    junitVersion = "5.0.0-RC3" 
} 

repositories { 
    mavenCentral() 
} 

dependencies { 

    compile "org.springframework:spring-core:${springVersion}" 
    compile "org.springframework:spring-context:${springVersion}" 
    compile "org.springframework:spring-context-support:${springVersion}" 
    compile "org.springframework:spring-beans:${springVersion}" 
    compile "org.springframework:spring-web:${springVersion}" 
    compile "org.springframework:spring-webmvc:${springVersion}" 
    compile "org.springframework:spring-orm:${springVersion}" 
    compile "org.springframework:spring-oxm:${springVersion}" 
    compile "org.springframework:spring-jdbc:${springVersion}" 
    compile "org.springframework:spring-test:${springVersion}" 
    compile group: 'mysql', name: 'mysql-connector-java', version: '5.1.38' 

    compile group: 'javax.mail', name: 'javax.mail-api', version: '1.5.6' 


    compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25' 
    compile group: 'ch.qos.logback', name: 'logback-classic', version: '1.2.2' 

    compile group: 'com.fasterxml.jackson.module', name: 'jackson-module-parameter-names', version: '2.9.0.pr2' 
    compile group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jdk8', version: '2.9.0.pr2' 
    compile group: 'com.fasterxml.jackson.datatype', name: 'jackson-datatype-jsr310', version: '2.9.0.pr2' 
    compile 'javax.servlet:javax.servlet-api:3.1.0' 

    testCompile "org.junit.jupiter:junit-jupiter-api:${junitVersion}" 
    testRuntime("org.junit.jupiter:junit-jupiter-engine:${junitVersion}") 
} 

cargo { 
    containerId = 'tomcat8x' 
    port = 8080 

deployable { 
    context = 'example' 
} 

remote { 
    hostname = 'host.name.com' 
    username = 'tomcat' 
    password = 'pass' 
} 

Répondre

0

Fondamentalement étaient 2 numéros

1. non-concordance Nom: en application.properties le nom dans le $ {} était différent que celui fourni par commande -ligne

Solution:

application.properties 
spring.datasource.username=${username} 

et commande en ligne gradle

gradle build -Pusername=tester 

2. Dot question avec gradle:

ne peut pas mettre

gradle build -Pspring.datasource.username=tester 

même si vous avez dans application.properties

spring.datasource.username=${spring.datasource.username} 

car vous obtenez une exception:

L'exécution a échoué pour la tâche ': processResources'.

Impossible de copier le fichier '.src \ main \ resources \ application.properties' dans '. \ Build \ resources \ main \ application.properties'.

Solution:

au lieu de points utilisent _ signe

gradle build -Pspring_datasource_username=tester 

et dans les propriétés d'application

spring.datasource.username=${spring_datasource_username}