将Oracle数据库连接到Grails 3

时间:2015-06-10 09:48:19

标签: oracle grails

我正在尝试将Oracle数据库用于Grails项目。我使用命令行工具。

到目前为止:

  • 我已将ojdb6放入我必须自己创建的lib目录中,位于我的应用程序的根目录

  • 我修改了application.yml,如下所示:

    dataSource:
        pooled: true
        jmxExport: true
        driverClassName: oracle.jdbc.OracleDriver
        username: usrname
        password: pwd
    
    environments:
        development:
            dataSource:
                dbCreate: create-drop
                url: jdbc:oracle:thin:@//url:port/db
        test:
            dataSource:
                dbCreate: update
                url: jdbc:oracle:thin:@//url:port/db
        production:
            dataSource:
                dbCreate: update
                url: jdbc:oracle:thin:@//url:port/db
                properties:
                    jmxEnabled: true
                    initialSize: 5
                    maxActive: 50
                    minIdle: 5
                    maxIdle: 25
                    maxWait: 10000
                    maxAge: 600000
                    timeBetweenEvictionRunsMillis: 5000
                    minEvictableIdleTimeMillis: 60000
                    validationQuery: SELECT 1
                    validationQueryTimeout: 3
                    validationInterval: 15000
                    testOnBorrow: true
                    testWhileIdle: true
                    testOnReturn: false
                    jdbcInterceptors: ConnectionState
                    defaultTransactionIsolation: 2 # TRANSACTION_READ_COMMITTED
    
  • 我还创建了一个带有Integer属性的域类,只是试一试。

然而,它似乎不起作用。我收到一条巨大的错误消息,甚至不适合我的命令窗口。当我使用--stacktrace时,第一条消息是"无法启动服务器"。

我一直试图解决这个问题三天,欢迎任何想法/评论。谢谢你。

附注:当我使用默认数据库时,everythink工作正常,而不是更改配置中的任何内容。

3 个答案:

答案 0 :(得分:5)

尝试下面,它应该工作。如果它没有发布堆栈跟踪。下面的片段为我工作。

添加依赖项     runtime' oracle:ojdbc6:11.2.0.4.0'

application.yml的变化:

environments:
    dataSource:
        pooled: true
        jmxExport: true
        driverClassName: org.h2.Driver
        username: sa
        password:


development:
    dataSource:
        dbCreate: validate
        url: jdbc:oracle:thin:@xxxx:1521:xx
        driverClassName: oracle.jdbc.OracleDriver
        dialect: org.hibernate.dialect.Oracle10gDialect
        username: "XXXXXX"
        password: "XXXXXX"
        properties:
           ***: **
           ***: **
test:
    dataSource:
        dbCreate: update
        url: jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE

production:
    dataSource:
        dbCreate: update
        url: jdbc:h2:prodDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE
        properties:
            jmxEnabled: true
            initialSize: 5
            maxActive: 50
            minIdle: 5
            maxIdle: 25
            maxWait: 10000
            maxAge: 600000
            timeBetweenEvictionRunsMillis: 5000
            minEvictableIdleTimeMillis: 60000
            validationQuery: SELECT 1
            validationQueryTimeout: 3
            validationInterval: 15000
            testOnBorrow: true
            testWhileIdle: true
            testOnReturn: false
            jdbcInterceptors: ConnectionState
            defaultTransactionIsolation: 2 # TRANSACTION_READ_COMMITTED

答案 1 :(得分:0)

在Oracle DB上,验证语句(属性validationQuery:SELECT 1)应该类似于:

"SELECT 1 FROM DUAL"

Oracle不支持SELECT 1

答案 2 :(得分:0)

我最近遇到了类似的问题,在我的情况下,这是由于使用了与我的Oracle数据库配置不匹配的格式;这是我发现的:

如果您的数据库使用 SID ,则您的网址应采用以下格式:

url: jdbc:oracle:thin:@url:port:sid

e.g。 url: jdbc:oracle:thin:@192.168.1.44:1521:testdb

如果您的数据库使用服务名称,则您的网址应采用以下格式:

url: jdbc:oracle:thin:@//url:port/servicename

e.g。 url: jdbc:oracle:thin:@//localhost:1521/testdb

希望这有帮助

相关问题