Как передать параметры командной строки имени пользователя и пароля в jndi grails.naming.entries в Config.grooy - PullRequest
0 голосов
/ 21 сентября 2011

У меня есть запись jndi в Config.groovy, например:

grails.naming.entries = ['jdbc/test_me': [
    type: "javax.sql.DataSource", //required
        auth: "Container", // optional
        description: "Data source for ...", //optional
        //properties for particular type of resource
    url: "jdbc:oracle:thin:@testserver:1521:SID",
    username: "someuser",
    password: "somepassword",
    driverClassName: "oracle.jdbc.driver.OracleDriver",
    maxActive: "8", //and so on
        maxIdle: "4"
    ]
]

Это работает нормально, но я не хочу хранить имя пользователя / пароль в источнике Config.groovy. Есть ли способ передать учетные данные из параметров командной строки, -Duser = someuser -Dpass-somepassword, в grails.naming.entries в Config.groovy?

Ответы [ 2 ]

0 голосов
/ 22 сентября 2011

Похоже, любые опции, добавленные через grails.config.locations, недоступны в Config.groovy. "$ {System.getProperty ('password')}". ToString () - единственный способ, которым это работает. Вот мои результаты теста:

Добавлено в начале Config.groovy:

if (new File("${userHome}/.grails/${appName}-config.groovy").exists()){
    grails.config.locations = ["file:${userHome}/.grails/${appName}-config.groovy"]
}

Добавлено в конце Config.groovy:

println "(*) grails.config.locations = ${grails.config.locations}"
def f = new File("${userHome}/.grails/${appName}-config.groovy")
f.eachLine{ line -> println line }
println "test password: ${testPassword}" // same result ([:]) with grails.config.testPassword
println "${System.getProperty('password')}"

grails.naming.entries = ['jdbc/test_mnr': [
    type: "javax.sql.DataSource", //required
    auth: "Container", // optional
    description: "Data source for ...",
    url: "jdbc:oracle:thin:@server:1521:SID",
    username: "username",
    password: "${System.getProperty('password')}".toString(),
    driverClassName: "oracle.jdbc.driver.OracleDriver",
    maxActive: "8",
    maxIdle: "4",
    removeAbandoned: "true",
    removeAbandonedTimeout: "60",
    testOnBorrow: "true",
    logAbandoned: "true",
    factory: "org.apache.tomcat.dbcp.dbcp.BasicDataSourceFactory",
    validationQuery: "select count(*) from dual",
    maxWait: "-1"
  ]
]

Содержимое user.home / .grails / mnroad-config.groovy:

testPassword='some_password'

Вот результат при запуске с -Dpassword = somePassword:

(*) grails.config.locations = [file:C:\Documents and Settings\carr1den/.grails/mnroad-config.groovy]
testPassword=some_password
test password: [:]
somePassword

Параметр grailsApplication.config.testPassword доступен после инициализации приложения.

0 голосов
/ 21 сентября 2011

Лучше всего использовать внешние параметры конфигурации.

Это позволяет Grails загружать уникальные настройки для производственного (или тестового или dev) сервера, которые не хранятся в WAR приложения Grails.Другая приятная вещь заключается в том, что они могут быть обновлены без замены какого-либо кода, просто перезапустите приложение на сервере.

Пример из этой замечательной статьи по теме :

// Put this at the top of your Config.groovy
// Copied from http://blog.zmok.net/articles/2009/04/22/playing-with-grails-application-configuration
if(System.getenv("MY_GREAT_CONFIG")) {
    println( "Including configuration file: " + System.getenv("MY_GREAT_CONFIG"));
    grails.config.locations << "file:" + System.getenv("MY_GREAT_CONFIG")
} else {
    println "No external configuration file defined."
}

Теперь установите переменную окружения MY_GREAT_CONFIG в качестве абсолютного пути для внешнего конфига groovy.См. Ссылку для более полного примера.

...