Joh*_*tle 7 grails datasource ehcache
使用Grails 2.5的开箱即用安装和一个干净的默认配置,添加第二个数据源总是在尝试启动应用程序时提供此异常.这曾经与grails 2.3.x没有问题
DataSource.groovy:
environments {
development {
dataSource {
dbCreate = "update"
url = "jdbc:mysql://127.0.0.1:3306/myapp"
username = "myuser"
password = "mypass"
}
dataSource_report {
url = "jdbc:mysql://127.0.0.1:3306/myapp_reporting"
username = "someuser"
password = "somepass"
}
}
Run Code Online (Sandbox Code Playgroud)
两个数据库都存在,如果只定义了一个数据源,则可以连接到这两个数据库.
在BuildConfig.groovy,所有的东西都是默认的(我假设),包括:
plugins {
build ":tomcat:7.0.55"
compile ":scaffolding:2.1.2"
compile ':cache:1.1.8'
compile ":asset-pipeline:2.1.1"
compile ":spring-security-core:2.0-RC4"
compile ":quartz:1.0.2"
runtime ":hibernate4:4.3.8.1" // or ":hibernate:3.6.10.18"
runtime ":database-migration:1.4.0"
runtime ":cors:1.1.6"
}
Run Code Online (Sandbox Code Playgroud)
有很多帖子都有这个错误,但它们似乎是因为作者试图使用非标准版本或缓存.
还尝试将此添加到Config.groovy,根据这篇文章:https://github.com/grails/grails-core/releases/tag/v2.5.0
beans {
cacheManager {
shared = true
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这没有帮助.
注意,我们使用默认的开箱即用配置缓存
hibernate {
cache.use_second_level_cache = true
cache.use_query_cache = false
cache.region.factory_class = 'org.hibernate.cache.ehcache.EhCacheRegionFactory' // Hibernate 4
singleSession = true // configure OSIV singleSession mode
flush.mode = 'manual' // OSIV session flush mode outside of transactional context
}
Run Code Online (Sandbox Code Playgroud)
====更新====
替换此行(在DataSource.groovy下面hibernate部分):
cache.region.factory_class = 'org.hibernate.cache.ehcache.EhCacheRegionFactory'
Run Code Online (Sandbox Code Playgroud)
有了这个:
cache.region.factory_class = 'org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory'
Run Code Online (Sandbox Code Playgroud)
似乎已经解决了这个问题,但现在的问题是,这个"修复"有什么缺点吗?
只是为了跟踪(就像OP已经在问题本身中回答的那样):
cache.region.factory_class将in更改DataSource.groovy为如下所示:
hibernate {
cache.region.factory_class = "org.hibernate.cache.SingletonEhCacheRegionFactory"
}
Run Code Online (Sandbox Code Playgroud)
对于那些遇到类似以下错误的人,net.sf.ehcache.CacheException: Another unnamed CacheManager already exists in the same VM.请将以下内容添加到您的Config.groovy
beans {
cacheManager {
shared = true
}
}
Run Code Online (Sandbox Code Playgroud)
请参阅hibernate 插件中 ehcache 版本的更改
| 归档时间: |
|
| 查看次数: |
2085 次 |
| 最近记录: |