连接到 Grails 应用程序数据库
Posted
技术标签:
【中文标题】连接到 Grails 应用程序数据库【英文标题】:connecting to a grails app database 【发布时间】:2012-10-13 11:18:13 【问题描述】:我白天是一名 python 开发人员,但我也有一些 java 经验(主要是使用 struts)。在工作中,我收到了一个要安装的 grails 应用程序,这没问题,但是该应用程序的所有者没有提供任何凭据,并且该应用程序加载到了一个登录页面。
我解压了战争,但我认为数据库配置已打包到某个地方的 jar 中,因为我似乎找不到任何连接 URL。在我部署应用程序后创建了一个 h2 db 文件,所以我想知道:
如何像平常使用 SQLite 或 mysql 客户端一样连接到数据库、浏览表并创建管理员用户以便我可以登录?
【问题讨论】:
【参考方案1】:进行反编译。您不仅需要用户名和密码,还需要至少一个数据库JDBC URL。这可能包括 DBMS 名称、主机、端口、数据库名称 - 取决于 Java 驱动程序的具体情况。然后像往常一样在 Python 或其他任何东西中连接,或者使用DBVisualizer。
但是如果数据库在 H2/hsql 中(URL 类似于 jdbc:h2:mem:XXX
),那么您就有问题了:它是一个 Java 进程内 DBMS。为了获得对其的外部访问,您需要更改反编译的代码,编译并使用some additions 将其打包回来。希望不是你的情况。
在 hsql/H2 案例中的另一种方法是查找和反编译数据库引导代码 - 因为它是一个进程内 DB,它应该在每次应用程序启动时填充,因此应该有一个代码创建该超级用户。
【讨论】:
我最终确实反编译了代码,并找到了数据库用户名和密码。然后我用 H2 DB GUI 检查了 db 文件,结果发现公共模式是空的。我认为该应用程序有一个 url 来设置它。无论哪种方式,明天都会与应用程序所有者安排一个 webex,以指导我们完成配置 好在他们合作。顺便说一句,您是否知道您检查的数据库不是应用程序正在使用的数据库? “进程内”表示“内存中”和“每次运行应用程序时都重新创建”,因此在您的 H2 GUI 中创建了一个新实例。这就是为什么我要在反编译的源代码中寻找引导代码。【参考方案2】:在 Grails 中,数据库配置(包括身份验证设置)在名为 Datasource.groovy
的文件中声明,然后将其编译到 WAR 中。您需要源代码来查找 H2 DB 的用户名和密码。
【讨论】:
我反编译DataSource.class找到用户名并通过。然后下载 h2 jar 并运行:java -cp "h2-1.3.169.jar:$H2DRIVERS:$CLASSPATH" -Dh2.binAddress=0.0.0.0 org.h2.tools.Server -tcp -tcpAllowOthers 但它在抱怨司机。任何建议 我很傻,我认为安装程序会正确设置环境变量 H2DRIVERS :) 我很高兴我是 python 开发人员 没有找到哪个驱动? H2 安装程序无法真正知道非 H2 JDBC 驱动程序在哪里...【参考方案3】:我不知道 Python 是否可以连接到 java 数据源,但它可能是一个解决方案。
另一种解决方案可能是从 Grails 端提供一些 REST Web 服务,以使 python 程序能够访问数据库。这是我喜欢的方式,也是我经常选择的方式。
顺便说一句,您在 conf 目录 (grails-app/conf/DataSource.groovy) 中配置了 Grails 使用的数据库,您将获得数据库的 jdbc URL,该 URL 可以转换为经典的网址。例如:jdbc:mysql://localhost/my_app 指的是本地主机上的数据库 my_app 和 mysql 数据库的默认端口。
如果您需要更多信息,请随时询问。
干杯
【讨论】:
当我解压war时,WEB-INF/grails-app中没有conf目录,所有的都是视图,这就是为什么我认为它以某种方式打包到了一个jar中。有一个休眠插件目录,但也没有数据库配置 刚刚发现这个:./WEB-INF/classes/DataSource.class 这证实了我的怀疑以上是关于连接到 Grails 应用程序数据库的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Grails 3.0 连接到我的本地 Mysql 数据库
无法使用 Grails 3.1.1 连接到 mongo DB