编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

Grails指南15-配置之数据源基础

wxchong 2024-06-24 20:03:27 开源技术 10 ℃ 0 评论

由于Grails是基于Java技术构建的,因此配置数据源需要一些JDBC (the technology that stands for Java Database Connectivity)方面的知识。

如果你选择使用H2数据库以外的数据库,你需要先有一个JDBC驱动,例如MySQL需要Connector/J。JDBC驱动通常是以JAR包的形式存在的。此外,一个项目中会用到很多很多的JAR包,手动管理的话将十分麻烦,好在出现了Maven,它使你可以简简单单通过配置文件实现JAR包及其依赖的管理。例如你可以添加一条配置来从Maven库中获取MySQL驱动,关键代码如下:

dependencies {

runtime 'mysql:mysql-connector-java:5.1.29'

}

那么现在,驱动的问题解决了。接下来,需要了解的是,在Grails中如何对数据库进行配置。关于数据库配置文件的位置所在,共有两处可选,grails-app/conf/application.groovy或grails-app/conf/application.yml。关键配置信息及相关说明如下:

driverClassName JDBC驱动的类名,如com.mysql.jdbc.Driver

url JDBC的访问url,如jdbc:mysql://localhost:3306/my_database

username 数据库登录账号,如root

password 数据库登录密码,如12346

dbCreate 是否根据模型(domain model)自动生成数据库表,可选值有create,create-drop,update,validate。注:数据库需要自己手动去建立。

#################################

附加信息:

create 在程序启动时删除并重建表结构。

create-drop 在程序启动时构建表结构,在关闭程序时删除构建的表。从某种程度上看,与create方法效果相同,默认值。

update 更新,根据模型更新数据库,但更新的原则是保守更新,即可增但不可删,新字段是允许自动添加的,但旧的无用字段不会自动删除,因此表中的字段有新也有旧。

validate 验证,即不会改变数据库,只验证数据库与模型之间的映射是否合法,适用于部署到production环境之中。

#################################

pooled 是否使用连接池,连接池是用于管理数据库连接的缓冲池

logSql 是否将SQL日志输出到控制台

formatSql 格式化输出到控制台上的SQL

dialect 用来指代具体数据库的方言类,如org.hibernate.dialect.MySQL5InnoDBDialect

readOnly 设置数据源为只读状态,这将导致每次连接都会调用setReadOnly(true)方法

properties 数据源的额外配置。

以application.groovy为例,可以针对MySQL进行如下配置:

------------------------------------------------application.groovy

dataSource {

pooled = true

dbCreate = "update"

url = "jdbc:mysql://localhost:3306/my_database"

driverClassName = "com.mysql.jdbc.Driver"

dialect = org.hibernate.dialect.MySQL5InnoDBDialect

username = "root"

password = "123456"

properties {

jmxEnabled = true

initialSize = 5

maxActive = 50

minIdle = 5

maxIdle = 25

maxWait = 10000

maxAge = 10 * 60000

timeBetweenEvictionRunsMillis = 5000

minEvictableIdleTimeMillis = 60000

validationQuery = "SELECT 1"

validationQueryTimeout = 3

validationInterval = 15000

testOnBorrow = true

testWhileIdle = true

testOnReturn = false

jdbcInterceptors = "ConnectionState;StatementCache(max=200)"

defaultTransactionIsolation = java.sql.Connection.TRANSACTION_READ_COMMITTED

}

}

-----------------------------------------------例2

dataSource {

pooled = true

dbCreate = "update"

url = "jdbc:mysql://localhost:3306/my_database"

driverClassName = "com.mysql.jdbc.Driver"

dialect = org.hibernate.dialect.MySQL5InnoDBDialect

username = "username"

password = "password"

properties {

// Documentation for Tomcat JDBC Pool

// http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html#Common_Attributes

// https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/tomcat/jdbc/pool/PoolConfiguration.html

jmxEnabled = true

initialSize = 5

maxActive = 50

minIdle = 5

maxIdle = 25

maxWait = 10000

maxAge = 10 * 60000

timeBetweenEvictionRunsMillis = 5000

minEvictableIdleTimeMillis = 60000

validationQuery = "SELECT 1"

validationQueryTimeout = 3

validationInterval = 15000

testOnBorrow = true

testWhileIdle = true

testOnReturn = false

ignoreExceptionOnPreLoad = true

// http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html#JDBC_interceptors

jdbcInterceptors = "ConnectionState;StatementCache(max=200)"

defaultTransactionIsolation = java.sql.Connection.TRANSACTION_READ_COMMITTED // safe default

// controls for leaked connections

abandonWhenPercentageFull = 100 // settings are active only when pool is full

removeAbandonedTimeout = 120

removeAbandoned = true

// use JMX console to change this setting at runtime

logAbandoned = false // causes stacktrace recording overhead, use only for debugging

// JDBC driver properties

// Mysql as example

dbProperties {

// Mysql specific driver properties

// http://dev.mysql.com/doc/connector-j/en/connector-j-reference-configuration-properties.html

// let Tomcat JDBC Pool handle reconnecting

autoReconnect=false

// truncation behaviour

jdbcCompliantTruncation=false

// mysql 0-date conversion

zeroDateTimeBehavior='convertToNull'

// Tomcat JDBC Pool's StatementCache is used instead, so disable mysql driver's cache

cachePrepStmts=false

cacheCallableStmts=false

// Tomcat JDBC Pool's StatementFinalizer keeps track

dontTrackOpenResources=true

// performance optimization: reduce number of SQLExceptions thrown in mysql driver code

holdResultsOpenOverStatementClose=true

// enable MySQL query cache - using server prep stmts will disable query caching

useServerPrepStmts=false

// metadata caching

cacheServerConfiguration=true

cacheResultSetMetadata=true

metadataCacheSize=100

// timeouts for TCP/IP

connectTimeout=15000

socketTimeout=120000

// timer tuning (disable)

maintainTimeStats=false

enableQueryTimeouts=false

// misc tuning

noDatetimeStringSync=true

}

}

}

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表