使用 OS 环境中的用户名和密码配置 grails 数据源
Configuring grails datasources with username and password from OS environment
我目前正在开发一个 grails 应用程序。以前我一直在使用 Django 来创建 webapps。在 Django 中,您可以轻松创建从 OS 环境收集的设置。我发现这是一个简单的解决方案,可确保您不会将用户名和密码签入源代码存储库。
所以我想做的是 DataSource.groovy 能够从 OS 环境中提取用户名和密码。有没有人做过这样的事情,或者这不是前进的方式吗?
如果这不是 "grails way",应该怎么做,因为在存储库中拥有用户名和密码感觉不对?
您可以在Windows中创建环境变量。示例 DBCONNGRAILS。在 config.groovy (...\grails-app\conf\config.groovy) 你可以使用类似
def myConnectionString = System.getenv(DBCONNGRAILS)
警告:如果您从环境中获取变量(Windows),那么在开发过程中加载值时不会出现问题。但是当您使用生产服务器时,有时您需要为 tomcat 重新启动 OS 才能使更改生效。我建议外部化配置文件。
您可以在任何其他地方外部化配置,load/merge它只是在您的应用程序配置中。
我们在工作中使用 JNDI 正是这种情况。我们有 context.xml
个文件位于单个服务器的 Tomcat 目录中。 context.xml
包含数据源属性,然后在 datasource
闭包(在 Datasource.groovy
中定义)中,相应地设置 jndiName
属性。
关于 JNDI 的更多链接:
您可以在DataSource.groovy和Config.groovy中编写代码来获取env变量,然后设置用户名密码等。我总是把它用于我的生产应用程序,示例代码如下
//示例基于 url 结构,如 "mysql://username:password@host/database?autoReconnect=true&useUnicode=yes&characterEncoding=UTF-8"
dataSource {
String mysqlUrl = System.getenv("DATABASE_URL")
println ">>>>>> Got DATABASE_URL: ${mysqlUrl} <<<<<<<"
URI dbUri = new URI(mysqlUrl);
username = dbUri.userInfo.split(":")[0]
password = dbUri.userInfo.split(":")[1]
String databaseUrl = "jdbc:${dbUri.scheme}://${dbUri.host}${dbUri.path}"
if (dbUri.port > 0) {
databaseUrl += ":${dbUri.port}"
}
String query = dbUri.query ?: "reconnect=true"
query += "&autoReconnect=true&useUnicode=yes&characterEncoding=UTF-8"
databaseUrl += "?${query}"
url = databaseUrl
dialect = 'org.hibernate.dialect.MySQL5InnoDBDialect'
}
这是我确信必须有一些更简单的方法来做到这一点的方法之一。
PS:虽然我觉得很简单:)
我目前正在开发一个 grails 应用程序。以前我一直在使用 Django 来创建 webapps。在 Django 中,您可以轻松创建从 OS 环境收集的设置。我发现这是一个简单的解决方案,可确保您不会将用户名和密码签入源代码存储库。
所以我想做的是 DataSource.groovy 能够从 OS 环境中提取用户名和密码。有没有人做过这样的事情,或者这不是前进的方式吗?
如果这不是 "grails way",应该怎么做,因为在存储库中拥有用户名和密码感觉不对?
您可以在Windows中创建环境变量。示例 DBCONNGRAILS。在 config.groovy (...\grails-app\conf\config.groovy) 你可以使用类似
def myConnectionString = System.getenv(DBCONNGRAILS)
警告:如果您从环境中获取变量(Windows),那么在开发过程中加载值时不会出现问题。但是当您使用生产服务器时,有时您需要为 tomcat 重新启动 OS 才能使更改生效。我建议外部化配置文件。
您可以在任何其他地方外部化配置,load/merge它只是在您的应用程序配置中。
我们在工作中使用 JNDI 正是这种情况。我们有 context.xml
个文件位于单个服务器的 Tomcat 目录中。 context.xml
包含数据源属性,然后在 datasource
闭包(在 Datasource.groovy
中定义)中,相应地设置 jndiName
属性。
关于 JNDI 的更多链接:
您可以在DataSource.groovy和Config.groovy中编写代码来获取env变量,然后设置用户名密码等。我总是把它用于我的生产应用程序,示例代码如下 //示例基于 url 结构,如 "mysql://username:password@host/database?autoReconnect=true&useUnicode=yes&characterEncoding=UTF-8"
dataSource {
String mysqlUrl = System.getenv("DATABASE_URL")
println ">>>>>> Got DATABASE_URL: ${mysqlUrl} <<<<<<<"
URI dbUri = new URI(mysqlUrl);
username = dbUri.userInfo.split(":")[0]
password = dbUri.userInfo.split(":")[1]
String databaseUrl = "jdbc:${dbUri.scheme}://${dbUri.host}${dbUri.path}"
if (dbUri.port > 0) {
databaseUrl += ":${dbUri.port}"
}
String query = dbUri.query ?: "reconnect=true"
query += "&autoReconnect=true&useUnicode=yes&characterEncoding=UTF-8"
databaseUrl += "?${query}"
url = databaseUrl
dialect = 'org.hibernate.dialect.MySQL5InnoDBDialect'
}
这是我确信必须有一些更简单的方法来做到这一点的方法之一。
PS:虽然我觉得很简单:)