2015-05-05 15 views
5

Sto provando a creare un semplice progetto Grails 3 e sono rimasto bloccato con qualcosa di veramente semplice. Quindi voglio che le mie proprietà dell'origine dati provengano dalle opzioni VM impostate nel mio IDE IntelliJ. Prima in Grails 2.x, ho solo usato per fare qualcosa di simile:convertire il file di configurazione application.yml in application.groovy in Grails 3.x

environments { 
    development{ 
     //Database connection properties 
     def dbserver = System.properties.getProperty('dbserver') 
     def dbport = System.properties.getProperty('dbport') 
     ............ 
     dataSource { 
      url: "jdbc:sqlserver://${dbserver}:${dbport};databaseName=${dbname} 
     } 
    } 

Ora che ho application.yml, come faccio ad accedere "System.properties" e incorporarlo in yml? Ho letto che siamo in grado di utilizzare invece application.groovy se YML non lo supporta, in questo caso è ciò che l'application.groovy assomiglia:

grails { 
    profile = 'web' 
    codegen { 
     defaultPackage = 'defPack' 
    } 
} 

info { 
    app { 
     name = '@[email protected]' 
     version = '@[email protected]' 
     grailsVersion = '@[email protected]' 
    } 
} 

spring { 
    groovy { 
     template['check-template-location'] = false 
    } 
} 

hibernate { 
    naming_strategy = 'org.hibernate.cfg.DefaultNamingStrategy' 
    cache { 
     queries = false 
    } 
} 

grails { 
    mime { 
     disable { 
      accept { 
       header { 
        userAgents = ['Gecko', 'WebKit', 'Presto', 'Trident'] 
       } 
      } 
     } 

     types { 
      all = '*/*' 
      atom = 'application/atom+xml' 
      css = 'text/css' 
      csv = 'text/csv' 
      form = 'application/x-www-form-urlencoded' 
      html = ['text/html', 'application/xhtml+xml'] 
      js = 'text/javascript' 
      json = ['application/json', 'text/json'] 
      multipartForm = 'multipart/form-data' 
      rss = 'application/rss+xml' 
      text = 'text/plain' 
      hal = ['application/hal+json', 'application/hal+xml'] 
      xml = ['text/xml', 'application/xml'] 
     } 
    } 
    urlmapping { 
     cache { 
      maxsize = 1000 
     } 
    } 
    controllers { 
     defaultScope = 'singleton' 
    } 
    converters { 
     encoding = 'UTF-8' 
    } 
    views { 
     default { codec = 'html' } 
     gsp { 
      encoding = 'UTF-8' 
      htmlcodec = 'xml' 
      codecs { 
       expression = 'html' 
       scriptlets = 'html' 
       taglib = 'none' 
       staticparts = 'none' 
      } 
     } 
    } 
} 
dataSource { 
    pooled = true 
    jmxExport = true 
    driverClassName = 'com.microsoft.sqlserver.jdbc.SQLServerDriver' 
    dbCreate = '' 
    username = 'someUsername' 
    password = 'somePass' 
} 
environments { 
    development { 
     dataSource { 
      url = 'jdbc:sqlserver://localhost:1234;databaseName=someDbName;' 
     } 
    } 
} 

Grazie.

UPDATE:

application.groovy non è stata presa per impostazione predefinita, anche quando ho rimosso application.yml

+0

Per l'ultima parte, che avrebbe dovuto citarli: 'useragents = [ 'Gecko', 'WebKit'] ' –

+0

@IanRoberts, grazie aggiornerò il mio post. –

risposta

3

Si è rivelato ho avuto un problema, avevo bisogno di mettere parola chiave 'default' all'interno citazioni. Ad esempio:

grails { 
    profile = 'web' 
    codegen { 
     defaultPackage = 'defPack' 
    } 
} 

info { 
    app { 
     name = '@[email protected]' 
     version = '@[email protected]' 
     grailsVersion = '@[email protected]' 
    } 
} 

spring { 
    groovy { 
     template['check-template-location'] = false 
    } 
} 

hibernate { 
    naming_strategy = 'org.hibernate.cfg.DefaultNamingStrategy' 
    cache { 
     queries = false 
    } 
} 

grails { 
    mime { 
     disable { 
      accept { 
       header { 
        userAgents = ['Gecko', 'WebKit', 'Presto', 'Trident'] 
       } 
      } 
     } 

     types { 
      all = '*/*' 
      atom = 'application/atom+xml' 
      css = 'text/css' 
      csv = 'text/csv' 
      form = 'application/x-www-form-urlencoded' 
      html = ['text/html', 'application/xhtml+xml'] 
      js = 'text/javascript' 
      json = ['application/json', 'text/json'] 
      multipartForm = 'multipart/form-data' 
      rss = 'application/rss+xml' 
      text = 'text/plain' 
      hal = ['application/hal+json', 'application/hal+xml'] 
      xml = ['text/xml', 'application/xml'] 
     } 
    } 
    urlmapping { 
     cache { 
      maxsize = 1000 
     } 
    } 
    controllers { 
     defaultScope = 'singleton' 
    } 
    converters { 
     encoding = 'UTF-8' 
    } 
    views { 
     'default' { codec = 'html' }//THIS WAS THE SOURCE OF ERROR 
     gsp { 
      encoding = 'UTF-8' 
      htmlcodec = 'xml' 
      codecs { 
       expression = 'html' 
       scriptlets = 'html' 
       taglib = 'none' 
       staticparts = 'none' 
      } 
     } 
    } 
} 

def dbserver = System.properties.getProperty('dbserver') 
def dbport = System.properties.getProperty('dbport') 
def dbusername = System.properties.getProperty('dbusername') 
def dbpassword = System.properties.getProperty('dbpassword') 
def dbname = System.properties.getProperty('dbname') 

dataSource { 
    pooled = true 
    jmxExport = true 
    driverClassName = 'com.microsoft.sqlserver.jdbc.SQLServerDriver' 
    dbCreate = '' 
    username = dbusername 
    password = dbpassword 
} 
environments { 
    development { 
     dataSource { 
      url = 'jdbc:sqlserver://${dbserver}:${dbport};databaseName=${dbname}' 
     } 
    } 
} 
+0

come hai aggiunto il file application.groovy? significa che l'hai fatto da solo ..? come nel tuo aggiornamento hai detto che non è necessario per impostazione predefinita !! E che nel file application.groovy è possibile accedere a "System.properties" e ad altri oggetti relativi a Java/Groovy. A proposito, ho bisogno di usare anche i miei oggetti di classe groovy creati [Bisogno di importare classi]. Puoi per favore indicare qualche soluzione su questo! – artapart

+1

Sì, dovresti aggiungerlo manualmente e poi sbarazzarti del tuo file application.yml, altrimenti penso che la precedenza sia sulla versione yml e non su quella groovy. Sì, nel file groovy puoi usare qualsiasi System.properties, non ho provato a importare le classi ma puoi dare "import" una prova e vedere cosa succede. –

1

Potrebbe non essere una risposta diretta alla tua domanda. È possibile accedere alle proprietà del sistema in application.yml con l'aggiunta di seguito per build.gradle

tasks.withType(org.springframework.boot.gradle.run.BootRunTask) { 
systemProperties = System.properties 

Riferimento: https://github.com/grails/grails-core/issues/9086