`
wushexu
  • 浏览: 28133 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

GORM的独立启动(Standalone)

阅读更多

 

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应该知道怎么做吧。

至此,大功告成。


 

分享到:
评论
2 楼 px96004 2013-08-22  
佩服 大神
1 楼 boy002 2013-05-12  
很好,有时间要好好研究一下。

相关推荐

    gorm-standalone-example-2_4_x:Gorm独立示例-Spring Boot

    在没有Grails的情况下使用GORM 概括 这是一个简单的示例,演示了在之外使用。 它是适用于Grails 2.4.x的(2.3版之前的Grails 2.x)项目的延续。 Spring Boot用于处理配置和引导。 参考 笔记 这是一个快速的实验...

    gorm 中文文档(pdf)

    GORM是Go语言编写的开源对象关系映射(Object Relational Mapping,简称ORM)库,旨在为Golang开发者提供一个友好且功能齐全的ORM工具。ORM技术允许开发者通过面向对象的方式来操作关系数据库,无需编写大量的SQL...

    Grails GORM查询.pdf

    Grails框架中的GORM(Groovy Object Relational Mapping)是利用Groovy语言的优势来简化数据库操作的一套对象关系映射技术。GORM支持多种查询方式,提供了类似于Hibernate的查询能力,并且由于Groovy语言的动态特性...

    gorm文档_英文.pdf

    gorm文档_英文.pdf gorm文档是Golang语言中一个功能强大的ORM(Object-Relational Mapping)库,旨在提供简洁、灵活的数据库交互方式。下面是gorm文档的知识点总结: 1. Getting Started with GORM gorm文档的...

    standalone-gorm-examples

    GORM 独立示例 在 Groovy 脚本中使用 GORM for Hibernate4 groovy script-gorm-hibernate4.groovy 在 Groovy 脚本中使用 GORM for MongoDB groovy script-gorm-mongodb.groovy 在 Spring Boot 中将 GORM 用于 ...

    开源项目-jinzhu-gorm.zip

    《开源项目 Jinzhu-GORM:打造更便捷的数据关系处理》 在当今的软件开发领域,数据库操作是不可或缺的一部分。GORM,由Jinzhu开发的Go语言 ORM(对象关系映射)库,为开发者提供了更为简洁和高效的数据库操作方式。...

    Go语言中使用gorm小结

    首先说明的是,在项目中使用orm的好处很多: 防止直接拼接sql语句引入sql注入漏洞 方便对modle进行统一管理 专注业务,加速开发 坏处也是显而易见的: 开发者与最终的sql语句隔了一层orm,因此可能会...会返回gorm.R

    基于GIN + GORM + WIRE实现的web脚手架,支持gorm数据库操作、cors 跨域、集成jwt鉴权等.zip

    2. **GORM**: GORM是一个强大的ORM库,用于简化Go语言与数据库之间的交互。它可以自动管理数据库表的创建和更新,支持SQL的CRUD操作,以及事务处理。GORM支持多种数据库,如MySQL、PostgreSQL、SQLite等,使得数据库...

    go web项目框架(viper+gin+gorm)适合初学者使用

    Go Web项目框架,如标题所提及的“viper+gin+gorm”,是为初学者提供的一种高效、简洁的开发解决方案。这个框架组合充分利用了Go语言的强项,使其成为构建高性能Web应用的理想选择。让我们逐一深入理解这三个核心...

    GORM_ADO数据库操作模块.rar

    《GORM_ADO数据库操作模块详解》 在IT行业中,数据库操作是不可或缺的一部分,而GORM和ADO(ActiveX Data Objects)则是两种广泛使用的数据库访问技术。本篇将深入探讨GORM_ADO数据库操作模块,解析其核心概念、...

    Go-gen-将数据库转换为gorm结构体和RESTfulapi

    在Go语言的开发环境中,有时候我们需要快速地从现有的数据库模型生成对应的GORM结构体和RESTful API,以提高开发效率。`go-gen`工具正是为了这个目的而设计的,它可以帮助开发者将数据库模式轻松转化为Go代码,使得...

    基于GO语言实现的仿gorm的一个操作SQL数据库的框架源代码

    GORM是一个非常流行的ORM(对象关系映射)库,它为多种编程语言,包括Go,提供了方便的数据库操作接口。在这个场景中,我们讨论的是一个基于Go语言仿照GORM实现的数据库操作框架的源代码。 首先,GORM的设计目标是...

    Gin+Gorm练手小项目-bubble前后端代码合集

    Bubble 是一个使用 Gin 框架和 Gorm ORM 库开发的练手小项目,旨在帮助开发者熟悉 Gin 和 Gorm 的使用,并实践常见的 Web 开发模式和技术栈。Bubble 是一个简单的网页,用户可以发布任务、浏览任务、更新状态等操作...

    GORM DM8 driver. GORM 达梦数据库驱动

    **GORM DM8 Driver 概述** GORM DM8 驱动是针对达梦数据库(Dameng Database Management System)的扩展,它基于达梦官方提供的 Go 语言驱动进行了二次开发,旨在为开发者提供一个更加方便、开箱即用的解决方案。...

    Go-GORM-Golang神奇的ORM库目标是开发人员友好

    Go-GORM是一个在Golang(Go语言)中广泛使用的对象关系映射(ORM)库,它的目标是为开发者提供一个简单、高效的工具,使得数据库操作更加便捷。ORM库允许程序员用面向对象的方式来处理数据库,避免了直接编写SQL语句...

    Go-使用Gin和GORM与MariaDB集成的GolangRESTAPI示例

    在本文中,我们将深入探讨如何使用Gin框架和GORM库在Golang中构建一个集成MariaDB的RESTful API。Gin是一个轻量级、高性能的Web框架,而GORM是一个优秀的ORM(对象关系映射)库,使得数据库操作变得简单易懂。...

Global site tag (gtag.js) - Google Analytics