配置
配置启动
编程方式的启动配置项可以通过在"%PROJECT_HOME%\grails-app\conf"目录中创建一到多个自举("BootStrap")类,来添加到Grails 应用程序中:
class ExampleBootStrap {
init = { servletContext ->
// init app
}
destroy = {
// destroy app
}
}
应用启动的时候调用闭包"init",退出时调用"destroy" (如果存在的话)
| 警告 不能保证"destroy"一定会被执行,除非"非常正常"地关闭应用。(例如,使用应用服务器的shutdown命令).所以不要太依赖这个。 |
参见快速开始演示如何试用init来创建并保存域对象
配置数据源
数据源必须以"DataSource"结尾。若未找到数据源,Grails会自动启动内存数据库HSQLDB,数据库的schema会在运行时创建。下面是必需的四个字符串参数:
- url - 数据库的JDBC地址
- driverClassName - JDBC驱动器类名
- username - 用户名
- password - 密码
class HsqlDataSource { String dbCreate = "update" String url = "jdbc:hsqldb:hsql://localhost" String driverClassName = "org.hsqldb.jdbcDriver" String username = "sa" String password = "" }
连接池
连接池默认使用org.apache.commons.dbcp.BasicDataSource,它的所有参数都可以在数据源类中使用。若您想禁止连接池,可以设置一个参数"pooling",设为false,就会改为使用org.springframework.jdbc.datasource.DriverManagerDataSource。其他DriverManagerDataSource所不支持的参数会被忽略。
@Property boolean pooling = false
数据库自动生成
默认情况下Grails是通过"dbCreate"配置为程序启动时去更新或者创建数据库:
String dbCreate= "update"
如果这个属性被删除掉,那么必须手工创建数据库,dbCreate其他可选的值有:create,create-drop。
环境
默认情况下Grails创建3个数据源分别叫{{DevelopmentDataSource}}, ProductionDataSource and TestDataSource. 这些可以适配到相应的环境里,当你运行Grails的时候,你可以通过指定环境来指定试用特定的数据源:
grails run-app // 运行时使用默认的 "development" 数据源 grails dev run-app // runs with the "development" data source grails prod run-app // runs with the production data source grails test run-app // runs with the test data source
| 警告 当试用产品模式运行时,你必须确认拷贝grails-app/views 这个目录到web-app/WEB-INF/grails-app/下, 否则grails无法找到你的视图模板. 注意:你必须在启动程序_之后_做这个拷贝动作。 |
这些选项在将应用打包成WAR的时候也适用,打包时默认的数据源是_production_:
grails war // Packages the application with the "production" data source grails dev war // Packages the application with the "development" data source grails prod war // Packages the application with the "production" data source
如果你需要添加别的环境,比如{{BookDataSource}} ,你可以象这样启动程序:
grails -Dgrails.env=book run-app
连接池
默认情况下会使用org.apache.commons.dbcp.BasicDataSource, 连接池的所有属性都可以加到数据源配置类里。如果不想使用连接池,可以创建一个叫"pooling"的属性并设置为false,这样会使用org.springframework.jdbc.datasource.DriverManagerDataSource . 在数据源里配置的DriverManagerDataSource 不支持的属性会被忽略掉。
boolean pooling = false
SQL执行日志
您的Grails应用若要启动SQL执行日志,只需添加如下参数至Grails数据源文件:
def logSql = true
配置一个指定的 Dialect
要给Hibernate配置一个指定的Dialect,可以再数据源里配置一个'dialect'属性来指定要使用的dialect:
def dialect = MySQLDialect.class
使用其他数据库
Grilas GORM基于Hibernate的对象/关系映射框架,故对所有支持Hibernate数据库均提供支持。
Hibernate通常在下列SQL数据库上进行测试:
- DB2 7.1, 7.2, 8.1
- HSQL DB
- HypersonicSQL 1.61, 1.7.0, 1.7.2, 1.8
- Microsoft SQL Server 2000
- MySQL 3.23, 4.0, 4.1, 5.0
- Oracle 8i, 9i, 10g
- PostgreSQL 7.1.2, 7.2, 7.3, 7.4, 8.0, 8.1
- SAP DB 7.3
- Sybase 12.5 (JConnect 5.5)
- Timesten 5.1
Hibernate也已经在下列数据库上进行了测试,并且相信与当前的版本是兼容的:
- Apache Derby
- HP NonStop SQL/MX 2.0 (requires Dialect from HP)
- Firebird (1.5 with JayBird 1.01 tested)
- FrontBase
- Informix
- Ingres
- Interbase (6.0.1 tested)
- Mckoi SQL
- Pointbase Embedded (4.3 tested)
- Progress 9
使用MySQL
从下面地址下载MySQL的java驱动:
http://www.mysql.com/products/connector/j/
解压并且拷贝 mysql*.jar (not the debug jar)到你的grails应用的lib目录下.
将ApplicationDataSource改为你自己的设置.
class ApplicationDataSource {
boolean pooling = true
String dbCreate = "create-drop"
String url = "jdbc:mysql://localhost/yourDB"
String driverClassName = "com.mysql.jdbc.Driver"
String username = "yourUser"
String password = "yourPassword"
}
通过spring/resource.xml使用JNDI配置数据源
一般来说如果你的应用运行在一个已经通过JNDI配置好了数据源的J2EE应用服务器里的时候,为了重用已经配置好的连接,你可以需要这样配置。如果配置了一个名叫"dataSource"并且使用"org.springframework.jndi.JndiObjectFactoryBean"类的bean, Grails 会在运行时使用这个bean而不是使用grails-app/conf/ 里的数据源.
例如(当然你得根据实际情况修改JNDI名字):
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> <property name="jndiName" value="jdbc/myDataSource" /> </bean>
注意: 本功能从Grails 0.3开始提供 (见http://jira.codehaus.org/browse/GRAILS-272)
修改应用名 (开始于 0.5)
有时候你可能需要使用和目录名不一样的应用名字,这会影响到本地测试时使用的URI和编译出来的JAR的名字。
编辑项目目录下的 application.properties修改app.name的值即可
配置Log4J
在"web-app/WEB-INF/log4j.properties"文件中进行 Log4j的配置.请参照Log4j文档进行配置.
Log4j Hibernate Output
要记录 所有的SQL操作,请在下列位置的log4j.properties中
tmp/war/WEB-INF
添加
log4j.logger.org.hibernate=debug, stdout