【发布时间】:2015-01-19 11:50:14
【问题描述】:
当您使用 Grails 管理 MySQL 连接时,您需要(为了处理重新连接)在 DataSource.groovy 中的属性部分:
dataSource {
pooled = true
driverClassName = "com.mysql.jdbc.Driver"
dialect = "org.hibernate.dialect.MySQL5InnoDBDialect"
properties {
maxActive = -1
minEvictableIdleTimeMillis=1800000
timeBetweenEvictionRunsMillis=1800000
numTestsPerEvictionRun=3
testOnBorrow=true
testWhileIdle=true
testOnReturn=true
validationQuery="SELECT 1"
}
environments {
production{
dataSource {
dbCreate = "upate"
url = "jdbc:mysql://127.0.0.1:3306/mydb"
username = "myuser"
password = "mypass"
}
}
当你切换到使用 Tomcat 的连接池时,大多数例子都是这样的:
production {
dataSource {
dbCreate = "update"
jndiName = "java:comp/env/revolve"
}
问题 1
对于这种类型的连接(即使用 tomcat),DataSource.grovvy 中是否应该 pooled=true 或 false,或者这有关系吗?有帖子说一定是假的,有帖子说一定是真的,还有一些没有具体说明。如果设置为 True,这意味着有一个池池,但这是大多数示例所推荐的。
问题 2
属性部分是否被忽略?如果不是,建议设置哪些字段。根据我的反复试验,属性似乎被忽略了,这与 this one 之类的帖子相反。
例如使用 JNDI 时,DataSource.java 属性中的 validationQuery="SELECT 1" 似乎被忽略了。 IE。如果我重新启动数据库,Tomcat 上的应用程序将永久失去与数据库的连接。如果我因此在 Tomcat context.xml 中添加同一行:
<Resource name="revolve" auth="Container" type="javax.sql.DataSource"
maxActive="50" maxIdle="5" maxWait="10000"
username="myuser" password="mypass" driverClassName="com.mysql.jdbc.Driver"
validationquery="SELECT 1;"
url="jdbc:mysql://127.0.0.1:3306/mydb"/>
然后重启 Tomcat,现在如果我重启数据库,Tomcat 上的应用程序会继续运行。
这意味着在使用 Tomcat 的连接池时会忽略 DataSource.groovy 中数据源的属性部分。
【问题讨论】:
标签: grails jndi connection-pooling