如何在JHipster中最好地禁用ehcache?

3

我希望在生产环境中使用EHCache,但在开发环境中不使用,因为我倾向于在开发环境中调整数据库记录。

我搜索后唯一发现的是这个JVM选项可以完全禁用缓存: -Dnet.sf.ehcache.disabled=true,但不知为何这似乎并不是理想的解决方案。

最好的方法是在application-dev.yml文件中添加一个选项。我尝试将timeToLiveSeconds设得很低(1),但似乎没有任何效果。

我尝试像这样在我的REST服务中添加一个API,但它似乎也没有任何效果:

/**
 * GET  /clearCache -> Clear Cache
 */
@RequestMapping(value = "/clearCache",
        method = RequestMethod.GET,
        produces = MediaType.APPLICATION_JSON_VALUE)
@Timed
public ResponseEntity<String> clearCache() {
    CacheManager.getInstance().clearAll();
    return new ResponseEntity<String>(HttpStatus.OK);
}

此外,与这个问题相关的另一个问题是,我在CacheConfiguration.java中放置了一个调试断点,但似乎从未被触发。

@PreDestroy
public void destroy() {

非常感谢您寻求帮助!

以下是我的完整启动日志,包括快速启动:

[INFO] mypackage.Application - Starting Application on Lenovo-PC with PID 7408 (D:\projects\app\target\classes started by lenovo in D:\projects\app)
[DEBUG] mypackage.Application - Running with Spring Boot v1.2.4.RELEASE, Spring v4.1.6.RELEASE
[DEBUG] org.jboss.logging - Logging Provider: org.jboss.logging.Slf4jLoggerProvider
[DEBUG] mypackage.config.DatabaseConfiguration - Configuring Datasource
[WARN] org.hibernate.cache.ehcache.AbstractEhcacheRegionFactory - HHH020003: Could not find a specific ehcache configuration for cache named [mypackage.Org]; using defaults.
[WARN] org.hibernate.cache.ehcache.AbstractEhcacheRegionFactory - HHH020003: Could not find a specific ehcache configuration for cache named [mypackage.Workflow]; using defaults.
[WARN] org.hibernate.cache.ehcache.AbstractEhcacheRegionFactory - HHH020003: Could not find a specific ehcache configuration for cache named [mypackage.Department]; using defaults.
...
...
...

[DEBUG] mypackage.config.MailConfiguration - Configuring mail server
[INFO] mypackage.Application - Running with Spring profile(s) : [dev, fast]
1个回答

2
如果您查看CacheConfiguration类,您会看到:
@Profile("!" + Constants.SPRING_PROFILE_FAST)
public class CacheConfiguration {

如果您使用快速配置文件,则缓存被禁用,因此您可以使用此配置文件,或更改注释以仅在生产配置文件中启用缓存。

@Profile(Constants.SPRING_PROFILE_PRODUCTION)
public class CacheConfiguration {

你说得对,发出WARN日志的ehcache代码仍然会创建缓存,并且它会为你的三个实体:Org、Workflow和Department创建缓存。

        if ( cache == null ) {
            LOG.unableToFindEhCacheConfiguration( name );
            manager.addCache( name );
            cache = manager.getEhcache( name );
            LOG.debug( "started EHCache region: " + name );
        }

我不确定缓存是否用于实体,因为我们的配置未运行,但无论如何,警告并不令人满意,我们的配置可能还有一些遗漏需要解决。
您可以提交问题吗?

我一直使用 --spring.profiles.active=dev,fast,但是我认为只有在设置了环境标志 -Dnet.sf.ehcache.disabled=true 后缓存才被禁用。我是否漏掉了什么? - user1880957
我尝试使用--spring.profiles.active=dev,fast命令,但是我没有在CacheConfiguration的日志中看到“Starting Ehcache”的记录。 你确定你将profiles选项传递给了程序args而不是JVM args吗?你尝试使用mvn -Pfast spring-boot:run命令了吗? - Gaël Marziou
我已经编辑了我的原始问题,并添加了我的快速启动日志。您可以看到,尽管“Starting Ehcache”不在那里,但Ehcache仍然会发出警告,我确实认为它正在运行。当我添加特定的JVM参数-Dnet.sf.ehcache.disabled=true时,日志的这部分提到它被抑制了。 - user1880957
修改了答案,要求您创建一个问题。 - Gaël Marziou
当前的jhipster应用程序(3.5.0)不再具有“fast”配置文件,但是此提示仍然有效,因为您可以轻松地将配置类添加到配置限制中。 - chrismarx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接