DataSource.groovy classpath

时间:2014-08-13 14:11:34

标签: grails groovy jenkins

def encryptedUid = getClass().getClassLoader()
                             .getResourceAsStream('user.txt')
                             .getText()

当我在windows环境中运行时,dataSource.groovy文件中的这段代码运行正常,但是当我检查代码并且Jenkins尝试加载DataSource.groovy时,我得到:

加载DataSource.groovy时出错:无法在null对象上调用方法getText()。

user.txt文件位于src / java文件夹的根目录中,我知道它是内置于windows build中的war文件中的。它甚至无法在Linux机器上构建war文件。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

显然您正在尝试配置数据库用户名/密码,但出于安全原因,我们不想直接将它们放入DataSource.groovy。以下是我如何处理这个问题:

将秘密配置放在文件/grails-app/conf/secret.properties中。该文件的内容如下所示:

dataSource.username=root
dataSource.password=secret
# other secret configuration

通过将以下内容添加到Config.groovy

,将此文件包含在grails配置中
grails.config.locations = ["classpath:secret.properties"]

如果您希望能够覆盖配置。在每个环境的secret.properties中,将其更改为

grails.config.locations = [
    "classpath:secret.properties",
    "classpath:secret-${Environment.current}.properties"
]

然后,您可以(可选)添加文件secret-DEVELOPMENT.properties,该文件将覆盖开发环境中secret.properties中的配置,同样适用于其他环境。

当然,为了使其正常工作,构建战争(或执行secret*.properties)时必须存在run-app文件,并且不应将其签入VCS。

您不仅限于放置这些配置。文件位于类路径的相对位置。您可以使用file:前缀而不是classpath:将它们放在文件系统的任何位置。最后,您可以将秘密配置放在.groovy配置中。文件而不是.properties文件。