【问题标题】:How-to: Grails 3.0.2 + Oracle Database 12c?操作方法:Grails 3.0.2 + Oracle 数据库 12c?
【发布时间】:2015-06-29 21:50:16
【问题描述】:

我正在使用 Grails 迈出第一步,并尝试使用 Oracle Database 12c 创建一个 hello world 应用程序。

不幸的是,www.grails.org 上关于数据库特定部分的教程文档似乎并不全面(例如,与我现在使用多年的 Ruby on Rails 相比)——尤其是在非 H2 方面数据库。

最近有一些关于如何使用 Oracle Database 12c 启动和运行 Grails 3.0.2 应用程序的教程吗?

我主要对 a) 将相应的 JDBC 驱动程序放在哪里以及 b) 数据库配置应该是什么样子感兴趣。

对于一个)

grails.org 谈到了一个“lib”目录,但没有解释它存在于哪里或应该在哪里创建。其他消息来源说,“lib”目录已经过时了,因为有几个 Grails 版本,并且 JDBC 驱动程序应该通过来自某些存储库的依赖项来加载——这对于闭源 Oracle JDBC 驱动程序显然是不可能的。

对于 b)

目前,我在 <my-app>/grails-app/conf/DataSource.groovy 为 Oracle 12c 创建了基本数据库配置:

dataSource {
        url = "jdbc:oracle:thin:@my-server:my-port:my-sid"
        driverClassName = "oracle.jdbc.OracleDriver"
        dialect = "Oracle10gDialect"
        username = "my-user"
        password = "my-pass"
}

对于一个简单的 hello world 应用程序来说足够了吗?

到目前为止,我在网络上发现的所有内容在 Grails 方面(涵盖版本 2.x 或 1.x)和/或 Oracle 方面(涵盖版本 10* 或 11*)都已过时。

感谢任何提示!


更新(仅作记录,并将以下 cmets 汇总):

1)

编辑<myapp>/grails-app/conf/application.yml

hibernate:
    jdbc:
        use_get_generated_keys: true
(...)
dataSource:
    pooled: true
    jmxExport: true
    driverClassName: oracle.jdbc.OracleDriver
    username: <myuser>
    password: <mypassword>
(...)
environments:
    development:
        dataSource:
            dbCreate: create
            url: jdbc:oracle:thin:@<myserver>:<myport>:<mysid>
(...)

2)

获取适合您的 JDK 和 Oracle DB 版本的相应 Oracle JDBC 驱动程序。就我而言(openJDK 7 + Oracle 12c),这是来自 Oracle 网站的 ojdbc7.jar 版本 12.1.0.2.0:http://www.oracle.com/technetwork/database/features/jdbc/index.html

3)

将此 JDBC 驱动程序放在 &lt;myapp&gt;/lib 中(如果该目录尚不存在,则创建此目录)。

4)

将此 JDBC 驱动程序的详细信息添加到 &lt;myapp&gt;/build.gradle 的依赖项部分(必要时进行修改以适应您的环境/版本):

(...)
dependencies {
    (...)
    runtime "com.oracle.ojdbc7:12.1.0.2.0" 
    (...)
}
(...)

5)

创建一个 Maven 工件(根据需要进行修改以适应您的环境/版本):

mvn install:install-file -Dfile=lib/ojdbc7.jar -DgroupId=com.oracle -DartifactId=ojdbc7 -Dversion=12.1.0.2.0 -Dpackaging=jar -DgeneratePom=true

6)

将 JDBC 驱动程序的路径添加到您的 CLASSPATH:export CLASSPATH=/&lt;somewhere&gt;/&lt;myapp&gt;/lib/ojdbc7.jar

7)

享受...

【问题讨论】:

  • 需要第6步吗?我以为lib中的所有东西都是默认启动配置导入的。

标签: oracle grails jdbc


【解决方案1】:

是的,这暂时可以。但是有一些细节缺失。 我一到办公室就会发布详细的说明。 实际上,在 grails 站点的某个地方有一个 mySql 示例,从中可以清楚地看出如何为 oracle DB 制作相同的示例。

我刚刚创建了一个新应用程序,并将其与 myne for oracle 11g 进行了比较。 这里是:

  1. ./build.gradle,在“依赖项”部分添加以下行:

    运行时“com.oracle:ojdbc14:10.2.0.3.0”

  2. ./grails-app/conf/application.yml,将以下内容添加到“休眠”部分:

jdbc:
    use_get_generated_keys: true
  1. ./grails-app/conf/application.yml,dataSource: 部分应该是这样的:
dataSource:
    pooled: true
    jmxExport: true
    driverClassName: oracle.jdbc.OracleDriver
    username: YOURUSERNAME
    password: yoursecret
  1. ./grails-app/conf/application.yml,environments:配置,三个环境都应该是这样的:
environments:
development:
    dataSource:
        dbCreate: create
        url: jdbc:oracle:thin:@somehost.net:1521:YOURORAINSTANCE
test:
    dataSource:
        dbCreate: update
        url: jdbc:oracle:thin:@somehost.net:1521:YOURORAINSTANCE
production:
    dataSource:
        dbCreate: update
        url: jdbc:oracle:thin:@somehost.net:1521:YOURORAINSTANCE

而且您拥有的 Oracle 的 Hibernate 方言已经很老了,我认为您最好将其删除,而无需明确指定它一切正常。

【讨论】:

  • 似乎我很难让你的第 1 部分工作(这可能是我的部分 a):))。在我的应用程序中启动 grails 时出现以下错误:Error initializing classpath: Could not find ojdbc14.jar (com.oracle:ojdbc14:10.2.0.3.0)。和Searched in the following locations: https://repo.grails.org/grails/core/com/oracle/ojdbc14/10.2.0.3.0/ojdbc14-10.2.0.3.0.jar。从 Oracle 网站和export CLASSPATH=&lt;my-download-directory&gt;/ojdbc14.jar 下载了这个 jar(版本 10.2.0.3.0)。但是这个错误仍然存​​在。 :-(
  • 是的,您的本地 Maven 存储库中必须有 Oracle JDBC 驱动程序。我有它是因为其他项目。这个我忘记说了,抱歉。网上有很多资源描述了如何制作一个 oracle JDBC maven 工件,只要 google 一下。
【解决方案2】:

你可以通过这个maven命令获取JDBC驱动。

mvn install:install-file \ -Dfile=/lib/ojdbc7.jar\ -DgroupId=com.oracle\ -DartifactId=ojdbc7\ -版本=12.1.0.1 \ -D包装=罐子\ -DgeneratePom=true

【讨论】:

  • 嗨 Nirmala + @Masterziv。代号“maven”是缺少的链接,谢谢! :) 我想给你们两个“接受的答案”,但不幸的是这是不可能的。但两者都绝对有用!
【解决方案3】:
  1. http://www.oracle.com/technetwork/database/features/jdbc/jdbc-drivers-12c-download-1958347.html下载ojdbc7.jar

  2. 在应用程序的主文件夹中创建一个 /lib 文件夹(lib 文件夹已从 Grails 3 中删除)

  3. 将 ojdbc7.jar 复制到 lib 文件夹

  4. 将此行添加到 /build.gradle 文件

  dependencies{
       (...)
       runtime fileTree(dir: 'lib', include: '*.jar')
       (...)
  }
  1. /grails-app/conf/application.yml 中创建行
 hibernate:
      (...)
      jdbc:
         use_get_generated_keys: true

 dataSource:
    pooled: true
    jmxExport: true
    driverClassName: oracle.jdbc.OracleDriver
    username: DBUSERNAME
    password: dbpassword

 environments:
     development:
         dataSource:
             dbCreate: create
             url: jdbc:oracle:thin:@localhost.net:1521:dbname
     test:
         dataSource:
             dbCreate: update
             url: jdbc:oracle:thin:@localhost.net:1521:dbname
     production:
         dataSource:
             dbCreate: update
             url: jdbc:oracle:thin:@locaLhost.net:1521:dbname

【讨论】:

    【解决方案4】:

    Hibernate 从 2.0.1 (Grails 2.0.1) 开始支持属性“方言”。如下所示。假设 Hibernate 的较新版本仍有类似的属性。

    文件 .../grails-app/conf/DataSource.groovy

    // Global data source settings
    // Note that these global properties values are composited with
    // the environment-specific properties under "environments"
    dataSource {
      pooled = true
      driverClassName = "oracle.jdbc.OracleDriver"
      ...
      // Required for function with Oracle 12c and above.
      // Not required for Oracle 11.2 and below. For the present works with both.
      // Specifying Oracle 10 dialect is sufficient.
      // Oracle 12c specific dialect support is not available for Hibernate 2.0.1.
      // Works with either ojdbc7 or ojdbc8 jars.
      dialect = org.hibernate.dialect.Oracle10gDialect
    }
    

    应用“方言”属性足以针对 Oracle 11g、12c 运行旧代码。它为代码迁移到新版本和依赖项争取了时间。

    【讨论】:

      猜你喜欢
      • 2014-06-12
      • 2020-02-18
      • 1970-01-01
      • 2019-05-17
      • 1970-01-01
      • 1970-01-01
      • 2020-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多