从OS环境使用用户名和密码配置grails数据源

时间:2015-12-17 21:32:46

标签: grails passwords datasource username

我目前正在处理grails应用程序。以前我一直在使用Django来创建webapps。在django中,您可以轻松创建从OS环境中收集的设置。我发现这是一个简单的解决方案,可确保您不会将用户名和密码签入源代码存储库。

所以我想要做的是在DataSource.groovy中能够从OS环境中提取用户名和密码。有没有人这样做过,或者这不是前进的方式?

如果这不是“grails方式”,应该如何完成,因为在存储库中输入用户名和密码只是感觉不对?

4 个答案:

答案 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:我觉得很简单:)