我目前正在处理grails应用程序。以前我一直在使用Django来创建webapps。在django中,您可以轻松创建从OS环境中收集的设置。我发现这是一个简单的解决方案,可确保您不会将用户名和密码签入源代码存储库。
所以我想要做的是在DataSource.groovy中能够从OS环境中提取用户名和密码。有没有人这样做过,或者这不是前进的方式?
如果这不是“grails方式”,应该如何完成,因为在存储库中输入用户名和密码只是感觉不对?
答案 0 :(得分:0)
您可以在Windows中创建环境变量。示例 DBCONNGRAILS 。在config.groovy(... \ grails-app \ conf \ config.groovy)中你可以使用像
这样的东西def myConnectionString = System.getenv(DBCONNGRAILS)
警告:如果从环境中获取变量(Windows),则在开发时加载值时没有问题。但是当您使用生产服务器时,有时您需要重新启动操作系统以便tomcat能够获取更改。我建议外部化配置文件。
答案 1 :(得分:0)
您可以在任何其他位置外化配置,并在应用程序配置中加载/合并它。
答案 2 :(得分:0)
我们正在使用JNDI来完成这种情况。我们有context.xml
个文件位于各个服务器的Tomcat目录中。 context.xml
包含数据源属性,然后在datasource
闭包内(在Datasource.groovy
中定义),相应地设置jndiName
属性。
关于JNDI的更多链接:
答案 3 :(得分:0)
您可以在DataSource.groovy和Config.groovy中编写代码以获取env变量,然后设置用户名密码和其他内容。我总是以它为我的制作应用程序,示例代码如下 // Eample基于url结构,如" mysql://用户名: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:我觉得很简单:)