我正在开发一个小型grails应用程序。我想为应用程序创建一个安装向导,使用户能够通过Web界面配置数据连接设置。有没有办法在应用程序运行时停止数据连接并配置数据源?我想这样做,同时保持为所有域对象利用GORM / Hibernate的能力。配置数据源后重新启动/重新加载应用程序就可以了。
答案 0 :(得分:0)
在Config.groovy文件中,为grails.config.locations
结果你会有这样的东西
grails.config.locations = ["file:${userHome}/.grails/global-config.groovy",
"classpath:${appName}-config.properties",
"classpath:${appName}-config.groovy",
"file:${userHome}/.grails/${appName}-config.properties",
"file:${userHome}/.grails/${appName}-config.groovy",
"file:${userHome}/.grails/${appName}-MyDbconfig.groovy"]
在用户输入数据库连接参数后的应用程序中,将其写入文件
"file:${userHome}/.grails/${appName}-MyDbconfig.groovy"
以相应的格式。像下面一样
dataSource{
url = '...'
username = '...'
password = '...'
properties {
...
}
}
保存文件并重新启动应用程序。
答案 1 :(得分:0)
由于您说用户应该能够通过Web界面配置数据源,因此您应该询问配置参数,因为maxActive,maxIdle等...一旦您拥有所有参数,您可以存储在任何您想要的位置。
在Grails应用程序中:
// grails-app/conf/BootStrap.groovy
import utils.DataSourceConfigurator
class BootStrap {
def init = { servletContext ->
DataSourceConfigurator.configure(servletContext)
}
}
就像你对你的应用程序说的那样,一旦准备好运行它就需要先配置DataSource。
package utils
import org.codehaus.groovy.grails.commons.ApplicationAttributes
import org.codehaus.groovy.grails.web.json.JSONObject
class DataSourceConfigurator {
private static JSONObject getDSConfig() {
JSONObject conf = new JSONObject()
// Go find the configuration wherever you stored it from the web interface, parse it and return it.
return conf
}
public static final configure = { servletContext ->
if(!servletContext) {
// Invalid servlet context
return
}
def context = servletContext.getAttribute(ApplicationAttributes.APPLICATION_CONTEXT)
def ds = context?.dataSourceUnproxied
if(!ds) {
// There is no datasource available to configure.
return
}
JSONObject config = getDSConfig()
if(!config) {
// No previous configuration saved from web interface.
return
}
ds.setInitialSize(config.initialSize)
ds.setMaxWait(config.maxWait)
ds.setMaxActive(config.maxActive)
ds.setMinIdle(config.minIdle)
ds.setMaxIdle(config.maxIdle)
....
// There are many other variables to configure. Check them by yourself.
}
}
有关详细信息,请查看有关DataSource配置的文档:http://docs.grails.org/latest/guide/conf.html#transactionAwareDataSourceProxy