我正在使用Grails开始我的第一步,并尝试使用Oracle Database 12c创建一个hello world应用程序。
不幸的是,www.grails.org上关于数据库特定部分的教程文档似乎并不那么全面(例如Ruby on Rails的例子,我现在使用了几年) - 特别是当涉及非H2时数据库。
是否有一些关于如何使用Oracle Database 12c启动和运行Grails 3.0.2应用程序的最新教程?
主要是我感兴趣的a)放置相应JDBC驱动程序的位置和b)数据库配置应该如何。
对于a)
grails.org谈论" lib"目录但不解释,它存在或应该创建的位置。其他消息来源说," lib"目录已过时,因为几个Grails版本和JDBC驱动程序应该通过某些存储库的依赖项加载 - 这显然不适用于闭源Oracle JDBC驱动程序。
对于b)
目前,我已在{12}的{12}创建基本数据库配置:
vecs.iter().flat_map(|x| x.iter().map(Clone::clone)).collect()
这对于一个简单的hello world应用程序来说应该足够吗?
到目前为止我在网上找到的所有内容都已过时,无论是在Grails方面(涵盖版本2.x oder 1.x)和/或Oracle方面(涵盖版本10 * oder 11 *)。
感谢任何提示!
更新(仅用于记录并汇总以下评论):
1)
修改<my-app>/grails-app/conf/DataSource.groovy
。
dataSource {
url = "jdbc:oracle:thin:@my-server:my-port:my-sid"
driverClassName = "oracle.jdbc.OracleDriver"
dialect = "Oracle10gDialect"
username = "my-user"
password = "my-pass"
}
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驱动程序放在<myapp>/grails-app/conf/application.yml
中(如果该目录尚不存在,则创建此目录)。
4)
将此JDBC驱动程序的详细信息添加到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>
(...)
的依赖项部分(必要时进行修改以适合您的环境/版本):
<myapp>/lib
5)
创建Maven工件(必要时进行修改以适合您的环境/版本):
<myapp>/build.gradle
6)
将JDBC驱动程序的路径添加到CLASSPATH:(...)
dependencies {
(...)
runtime "com.oracle.ojdbc7:12.1.0.2.0"
(...)
}
(...)
7)
享受......
答案 0 :(得分:2)
是的,同时也可以。但缺少细节。 我一到办公室,就会发布详细的说明。 实际上在grails网站上的某个地方有一个mySql示例,从中可以很清楚如何为oracle DB做同样的事情。
我刚创建了一个新应用程序,并将其与myne for oracle 11g进行了比较。 这是:
./ build.gradle,将以下行添加到&#34;依赖项&#34;部分:
运行时&#34; com.oracle:ojdbc14:10.2.0.3.0&#34;
./ grails-app / conf / application.yml,将以下内容添加到&#34; hibernate&#34;部分:
jdbc: use_get_generated_keys: true
dataSource: pooled: true jmxExport: true driverClassName: oracle.jdbc.OracleDriver username: YOURUSERNAME password: yoursecret
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
你所拥有的Hibernate方言非常古老,我认为你最好删除它,如果没有明确指出它,一切正常。
答案 1 :(得分:1)
您可以通过此maven命令获取JDBC驱动程序。
mvn install:install-file \ -Dfile = / lib / ojdbc7.jar \ -DgroupId = com.oracle \ -DartifactId = ojdbc7 \ -Dversion = 12.1.0.1 \ -Dpackaging = jar \ -DgeneratePom =真
答案 2 :(得分:0)
从http://www.oracle.com/technetwork/database/features/jdbc/jdbc-drivers-12c-download-1958347.html
在应用程序的主文件夹中创建一个&lt; myapp&gt; / lib文件夹(从Grails 3中删除了lib文件夹)
将ojdbc7.jar复制到lib文件夹
将此行添加到&lt; myapp&gt; /build.gradle文件
dependencies{
(...)
runtime fileTree(dir: 'lib', include: '*.jar')
(...)
}
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
答案 3 :(得分:0)
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
}
应用“dialect”属性足以针对Oracle 11g,12c运行旧代码。它花了一些时间将代码迁移到更新的版本和依赖项。