如何将用户名/密码命令行选项传递给Config.grooy中的jndi grails.naming.entries

如何将用户名/密码命令行选项传递给Config.grooy中的jndi grails.naming.entries,grails,passwords,jndi,Grails,Passwords,Jndi,我在Config.groovy中有一个jndi条目,如下所示: grails.naming.entries = ['jdbc/test_me': [ type: "javax.sql.DataSource", //required auth: "Container", // optional description: "Data source for ...", //optional //properties for particular

我在Config.groovy中有一个jndi条目,如下所示:

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传递到Config.groovy中的grails.naming.entries?

最好使用外部存储的配置设置

这允许Grails加载生产或测试或开发服务器的唯一设置,这些设置不存储在Grails应用程序中。另一个好处是,这些代码可以在不替换任何代码的情况下进行更新,只需在服务器上重新启动应用程序

示例来自:


现在,将环境变量MY_GREAT_CONFIG设置为外部groovy配置的绝对路径。有关更完整的示例,请参见链接。

似乎通过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"]
}
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"
  ]
]
testPassword='some_password'
在Config.groovy的末尾添加:

if (new File("${userHome}/.grails/${appName}-config.groovy").exists()){
    grails.config.locations = ["file:${userHome}/.grails/${appName}-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"
  ]
]
testPassword='some_password'
user.home/.grails/mnroad-config.groovy的内容:

if (new File("${userHome}/.grails/${appName}-config.groovy").exists()){
    grails.config.locations = ["file:${userHome}/.grails/${appName}-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"
  ]
]
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选项在应用程序初始化后可用