【发布时间】:2010-10-26 06:29:19
【问题描述】:
我正在开发的 grails 应用程序可以在 MySQL 或 SQL Server 上运行。我想在 application.properties 文件中添加一个新属性说
database.type=MySQL // 也可以是 SQLSERVER
如何在 Datasource.groovy 中获取此属性,以便如果它是 MySQL 我连接到 MySQL 服务器,或者它是 SQLSERVER 我连接到 SQL Server?
这是正确的方法吗?我该怎么做?
编辑:在阅读和搜索选项后,我想出了以下解释方式。 我在 /grails-app/conf/ 文件夹中创建了 config.properties 文件。
driverClassName = com.microsoft.sqlserver.jdbc.SQLServerDriver
dataSource.url = jdbc:sqlserver://localhost:1433;databaseName=testDB
dataSource.username = sa
dataSource.password = sa
还更新了 Config.groovy
grails.config.locations = ["classpath:config.properties"]
但我收到以下错误
无法加载指定的配置位置 classpath:config.properties : 类路径资源 [config.properties] 无法打开,因为它不存在
但是如果使用
grails.config.locations = ["file:E:/workspace/SpringSource2.3.3/GRAILS_PRO/config.properties"]
应用程序启动并能够连接到数据库。我不想使用静态文件路径。使用类路径时有什么问题?
'run-app' 和 'war' 模式有相同的问题,即相同的文件不存在错误。
第二次编辑:
在对使用类路径感到非常沮丧并且无法让它工作之后,我求助于使用环境属性。由于服务器将定义 CATALINA_HOME,因此我使用以下内容构建外部配置文件的路径。
def CATALINA_HOME = "CATALINA_HOME"
def CONFIG_FILE_NAME = "db_config.properties"
if(!grails.config.locations || !(grails.config.locations instanceof List)) {
grails.config.locations = []
}
if(System.getenv(CATALINA_HOME)) {
def fullPath = System.getenv(CATALINA_HOME) + File.separator + "webapps" + File.separator + "${appName}" + File.separator + "WEB-INF" + File.separator + "classes" + File.separator + CONFIG_FILE_NAME
grails.config.locations << "file:" + fullPath
} else {
println "Missing configuration!"
}
上述解决方案是 Tomcat 特定的。我真的很想看到类路径版本的工作!
谢谢。 问候, 杰伊·钱德兰。
【问题讨论】:
-
已尝试将属性文件放在根文件夹中,然后在 /grails-app/conf/ 文件夹中仍然不起作用。得到同样的错误。
-
也试过这里提到的little418.com/2010/04/…
-
你可以试试“classpath:/config.properties”。至少,它可以重现,它有时会起作用(并且不会在一分钟后,与另一个类似的文件一起使用)。
-
自定义配置文件不会被复制到 /target/classes 或 /web-app/WEB-INF/classes,即使它们已被读入并且正在工作。 - 这方面的官方文档非常糟糕。 - 我也尝试相应地设置 DataSource.groovy - 无济于事。 - 网络上的几个示例根本不适合我。 - 这非常令人沮丧,我敢打赌这不是因为我的愚蠢。
-
如果您指定将自定义配置文件复制到 _Events.groovy 中的类目录,如上一个链接中所述,它会被复制。我会试试“classpath:/config.properties”看看会发生什么。
标签: grails