2015-05-05 14 views
5

Próbuję stworzyć prosty projekt Grails 3 i utknąłem z czymś naprawdę prostym. Dlatego chcę, aby moje właściwości źródła danych pochodziły z opcji maszyn wirtualnych ustawionych w moim IDI IntelliJ. Przed w Grails 2.x, po prostu kiedyś zrobić coś takiego:Konwertuj plik konfiguracyjny application.yml na application.groovy w 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} 
     } 
    } 

Teraz mam application.yml, w jaki sposób mogę uzyskać dostęp do "System.properties" i osadzić go w yml? Czytałem, że możemy zamiast używać application.groovy jeśli yml nie obsługuje, w tym przypadku jest to, co application.groovy wygląda następująco:

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;' 
     } 
    } 
} 

Dzięki.

UPDATE:

application.groovy nie jest podjęta w domyślnie, nawet gdy usunąłem application.yml

+0

Do ostatniej części, trzeba by je zacytować: 'nagłówki UserAgent = [ „Gecko”, "WebKit"] ' –

+0

@IanRoberts, dzięki temu zaktualizuję mój post. –

Odpowiedz

3

Okazało się, miałem problem, musiałem umieścić „default” słowa kluczowego w cytaty. Na przykład:

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

w jaki sposób dodałeś plik application.groovy? co znaczy, że zrobiłeś to sam ..? jak w twojej aktualizacji powiedzieliście, że nie bierze domyślnie !! A niż w pliku application.groovy jest możliwy dostęp do "System.properties" i innego obiektu związanego z Java/Groovy. FYI Potrzebuję użyć własnych stworzonych obiektów klasy groovy [Need to import classes]. Czy możesz wskazać na to jakieś rozwiązanie! – artapart

+1

Tak, musiałbyś dodać go ręcznie, a następnie pozbyć się pliku application.yml, albo uważam, że pierwszeństwo ma wersja yml, a nie ta groovy. Tak, w pliku groovy możesz użyć dowolnego pliku System.properties, nie próbowałem importować klas, ale możesz dać "import" i zobaczyć, co się stanie. –

1

Może nie być bezpośrednią odpowiedzią na twoje pytanie. Możesz uzyskać dostęp do właściwości systemu w application.yml dodając poniżej build.gradle

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

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

Powiązane problemy