2015-05-05 1 views
5

Я пытаюсь создать простой проект Grails 3 и застрял с чем-то очень простым. Поэтому я хочу, чтобы мои свойства источника данных поступали из параметров VM, которые я установил в своей IntelliJ IDE. Перед тем как в Grails 2.x, я использовал, чтобы сделать что-то вроде:конвертировать конфигурационный файл application.yml в application.groovy в 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} 
     } 
    } 

Теперь у меня есть application.yml, как получить доступ к «System.properties» и вставить ее в YML? Я прочитал, что мы можем использовать вместо application.groovy если YML не поддерживает его, в этом случае это то, что application.groovy выглядит следующим образом:

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

Спасибо.

UPDATE:

application.groovy не принимаются, по умолчанию, даже когда я удалил application.yml

+0

В последней части, вы должны были бы процитировать их: 'userAgents = [ 'Gecko', 'WebKit'] ' –

+0

@IanRoberts, спасибо, я обновлю свой пост. –

ответ

3

Оказалось, у меня была проблема, мне нужно поставить ключевое слово «по умолчанию» в пределах кавычки. Нравится:

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

как вы добавили application.groovy файл? Значит, вы сделали это самим ...? так как в вашем обновлении вы сказали, что он не берет по умолчанию !! А чем в приложении.groovy файл возможен доступ к «System.properties» и другому связанному с Java/Groovy объекту. FYI Мне также нужно использовать собственные созданные объекты класса groovy [Необходимость импорта классов]. Не могли бы вы указать на какое-то решение? – artapart

+1

Да, вам придется добавить его вручную, а затем избавиться от вашего файла application.yml, иначе я думаю, что приоритет - на yml-версии, а не на хорошем. Да, в файле groovy вы можете использовать любые System.properties, я не пробовал импортировать классы, но вы можете попробовать «импортировать» и посмотреть, что произойдет. –

1

Не может быть прямого ответа на ваш вопрос. Вы можете получить доступ к свойствам системы в application.yml путем добавления ниже build.gradle

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

Ссылка: https://github.com/grails/grails-core/issues/9086

 Смежные вопросы

  • Нет связанных вопросов^_^