Gorm是Grails框架的orm(基于Hibernate)。Gorm用起来很方便,比直接用Hibernate方便。
很多用过Grails框架的开发者都有把Gorm独立拿出来使用的想法。比如有一些代码是在Grails环境里写的,但是想脱离web服务器使用。grails倒是可以命令行运行脚本,但是需要在grails应用的目录上运行,需要源代码,并且会有构建过程。
这个问题grails官方没有提供完整的方案。我通过查看grails的相关代码,解决了这个问题。贴出来和大家分享。
这个方案没有完全脱离grails,还是要使用grails的包,还是按grails的方式启动,只是过滤了不需要的资源(如Controller和Taglib)和插件。
共有以下文件(假设在~/standalone目录下):
wy-starter.conf
log4j.properties
xxx.groovy
bootstrap/
Bootstrap.groovy
RFGrailsPluginManagerFactoryBean.groovy
RFGrailsApplicationFactoryBean.groovy
lib/
spring-test-3.1.0.RELEASE.jar
jansi-1.2.1.jar
ant-1.8.2.jar
jna-3.2.3.jar
jline-1.0.jar
servlet-api-2.4.jar
gant_groovy1.8-1.9.6.jar
commons-cli-1.2.jar
另外需要grails应用部署(War解压后的目录)路径。指定部署路径是为了方便,其实只需要WEB-INF下的grails.xml、plugins、classes、lib。其中classes和lib在wy-starter.conf里设置类路径。
wy-starter.conf是groovy的启动配置文件;xxx.groovy是要运行的脚本文件;假设war包解压目录为~/standalone/wy
wy-starter.conf内容如下:
load ~/standalone/wy/WEB-INF/classes
load ~/standalone/wy/WEB-INF/lib/*.jar
load ~/standalone/lib/*.jar
load ~/standalone/bootstrap/*.groovy
load ${tools.jar}
xxx.groovy内容如下:
import bootstrap.*
def wyBase=System.getenv('WY_WEB_APP_BASE')
def appCtx=Bootstrap.bootstrap(wyBase)
//使用GORM的业务代码...
bootstrap/Bootstrap.groovy是启动Gorm环境的类:
package bootstrap
import org.codehaus.groovy.grails.commons.*
import org.codehaus.groovy.grails.commons.spring.GrailsRuntimeConfigurator
import org.codehaus.groovy.grails.plugins.GrailsPluginManagerFactoryBean
import org.codehaus.groovy.grails.core.io.*
import org.codehaus.groovy.grails.web.context.*
import grails.spring.WebBeanBuilder
import org.springframework.core.io.FileSystemResource
import org.springframework.mock.web.MockServletContext
class Bootstrap {
static def bootstrap(appBase){
if(appBase.endsWith('/') || appBase.endsWith('\\')){
appBase=appBase[0..-2]
}
def beanDefinitions = new WebBeanBuilder().beans {
grailsResourceLoader(GrailsResourceLoaderFactoryBean)
grailsDescriptor(FileSystemResource,"$appBase/WEB-INF/grails.xml")
grailsApplication(RFGrailsApplicationFactoryBean){
grailsDescriptor = ref(grailsDescriptor)
grailsResourceLoader = ref("grailsResourceLoader")
}
pluginManager(RFGrailsPluginManagerFactoryBean){
grailsDescriptor = ref(grailsDescriptor)
application = ref(grailsApplication)
}
grailsConfigurator(GrailsRuntimeConfigurator,grailsApplication){
pluginManager = ref("pluginManager")
}
}
def appCtx = beanDefinitions.createApplicationContext()
//grailsApp = appCtx.grailsApplication
def servletContext = new MockServletContext(appBase,new PluginPathAwareFileSystemResourceLoader())
appCtx.servletContext=servletContext
servletContext.setAttribute(ApplicationAttributes.APPLICATION_CONTEXT, appCtx)
ExpandoMetaClass.enableGlobally()
def webCtx = GrailsConfigUtils.configureWebApplicationContext(servletContext, appCtx)
//GrailsConfigUtils.executeGrailsBootstraps(grailsApp, webCtx, servletContext)
def persistenceInterceptor = webCtx.containsBean('persistenceInterceptor') ? webCtx.persistenceInterceptor : null
persistenceInterceptor?.init()
return webCtx
}
}
bootstrap/RF*只是在grails的GrailsPluginManagerFactoryBean.groovy和GrailsApplicationFactoryBean.groovy的基础上增加了过滤的功能(前者过滤Controller和Taglib,后者过滤了除Hibernate外的插件)。直接用Grails的也是可以的,只不过多加载一些东西。代码就不必贴出来了。
数据库的连接配置和grails一样,如果配置在grails-app/conf/DataSource.groovy的话,已经编译到classes里去了。事实上,grails-app/conf里所以的配置都是可用的。
最后,要运行xxx.groovy,可以这样:
cd ~/standalone
export GROOVY_CONF=~/standalone/wy-starter.conf
export WY_WEB_APP_BASE=~/standalone/wy
groovy xxx.groovy
注意GROOVY_CONF变量静态定义的话(如放在~/.profile)会影响i此用户运行其他groovy脚本。以上命令以linux环境为例,如果你的环境是windows应该知道怎么做吧。
至此,大功告成。
分享到:
相关推荐
在没有Grails的情况下使用GORM 概括 这是一个简单的示例,演示了在之外使用。 它是适用于Grails 2.4.x的(2.3版之前的Grails 2.x)项目的延续。 Spring Boot用于处理配置和引导。 参考 笔记 这是一个快速的实验...
GORM是Go语言编写的开源对象关系映射(Object Relational Mapping,简称ORM)库,旨在为Golang开发者提供一个友好且功能齐全的ORM工具。ORM技术允许开发者通过面向对象的方式来操作关系数据库,无需编写大量的SQL...
Grails框架中的GORM(Groovy Object Relational Mapping)是利用Groovy语言的优势来简化数据库操作的一套对象关系映射技术。GORM支持多种查询方式,提供了类似于Hibernate的查询能力,并且由于Groovy语言的动态特性...
gorm文档_英文.pdf gorm文档是Golang语言中一个功能强大的ORM(Object-Relational Mapping)库,旨在提供简洁、灵活的数据库交互方式。下面是gorm文档的知识点总结: 1. Getting Started with GORM gorm文档的...
GORM 独立示例 在 Groovy 脚本中使用 GORM for Hibernate4 groovy script-gorm-hibernate4.groovy 在 Groovy 脚本中使用 GORM for MongoDB groovy script-gorm-mongodb.groovy 在 Spring Boot 中将 GORM 用于 ...
2. **GORM**: GORM是一个强大的ORM库,用于简化Go语言与数据库之间的交互。它可以自动管理数据库表的创建和更新,支持SQL的CRUD操作,以及事务处理。GORM支持多种数据库,如MySQL、PostgreSQL、SQLite等,使得数据库...
《开源项目 Jinzhu-GORM:打造更便捷的数据关系处理》 在当今的软件开发领域,数据库操作是不可或缺的一部分。GORM,由Jinzhu开发的Go语言 ORM(对象关系映射)库,为开发者提供了更为简洁和高效的数据库操作方式。...
首先说明的是,在项目中使用orm的好处很多: 防止直接拼接sql语句引入sql注入漏洞 方便对modle进行统一管理 专注业务,加速开发 坏处也是显而易见的: 开发者与最终的sql语句隔了一层orm,因此可能会...会返回gorm.R
Go Web项目框架,如标题所提及的“viper+gin+gorm”,是为初学者提供的一种高效、简洁的开发解决方案。这个框架组合充分利用了Go语言的强项,使其成为构建高性能Web应用的理想选择。让我们逐一深入理解这三个核心...
《GORM_ADO数据库操作模块详解》 在IT行业中,数据库操作是不可或缺的一部分,而GORM和ADO(ActiveX Data Objects)则是两种广泛使用的数据库访问技术。本篇将深入探讨GORM_ADO数据库操作模块,解析其核心概念、...
在Go语言的开发环境中,有时候我们需要快速地从现有的数据库模型生成对应的GORM结构体和RESTful API,以提高开发效率。`go-gen`工具正是为了这个目的而设计的,它可以帮助开发者将数据库模式轻松转化为Go代码,使得...
GORM是一个非常流行的ORM(对象关系映射)库,它为多种编程语言,包括Go,提供了方便的数据库操作接口。在这个场景中,我们讨论的是一个基于Go语言仿照GORM实现的数据库操作框架的源代码。 首先,GORM的设计目标是...
Bubble 是一个使用 Gin 框架和 Gorm ORM 库开发的练手小项目,旨在帮助开发者熟悉 Gin 和 Gorm 的使用,并实践常见的 Web 开发模式和技术栈。Bubble 是一个简单的网页,用户可以发布任务、浏览任务、更新状态等操作...
**GORM DM8 Driver 概述** GORM DM8 驱动是针对达梦数据库(Dameng Database Management System)的扩展,它基于达梦官方提供的 Go 语言驱动进行了二次开发,旨在为开发者提供一个更加方便、开箱即用的解决方案。...
Go-GORM是一个在Golang(Go语言)中广泛使用的对象关系映射(ORM)库,它的目标是为开发者提供一个简单、高效的工具,使得数据库操作更加便捷。ORM库允许程序员用面向对象的方式来处理数据库,避免了直接编写SQL语句...
在本文中,我们将深入探讨如何使用Gin框架和GORM库在Golang中构建一个集成MariaDB的RESTful API。Gin是一个轻量级、高性能的Web框架,而GORM是一个优秀的ORM(对象关系映射)库,使得数据库操作变得简单易懂。...