【问题标题】:What is the best way to disable ehcache in JHipster在 JHipster 中禁用 ehcache 的最佳方法是什么
【发布时间】:2015-07-31 23:12:37
【问题描述】:

我希望 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]

【问题讨论】:

    标签: java mysql database ehcache jhipster


    【解决方案1】:

    如果您查看 CacheConfiguration 类,您会看到:

    @Profile("!" + Constants.SPRING_PROFILE_FAST)
    public class CacheConfiguration {
    

    因此,如果您使用快速配置文件,则会禁用缓存,因此您要么使用此配置文件,要么更改注释以仅在 prod 配置文件中启用缓存。

    @Profile(Constants.SPRING_PROFILE_PRODUCTION)
    public class CacheConfiguration {
    

    你说得对,发出 WARN 日志的 ehcache 代码无论如何都会创建一个缓存,它会为您的 3 个实体执行此操作:组织、工作流和部门。

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

    我不确定缓存是否用于实体,因为我们的配置没有运行,但无论如何即使警告不令人满意,我们的配置中可能缺少一些东西来避免它。

    请问可以open an issue 吗?

    【讨论】:

    • 我一直使用--spring.profiles.active=dev,fast,但我认为在设置环境标志-Dnet.sf.ehcache.disabled=true 之前不会禁用缓存。我错过了什么吗?
    • 我尝试了--spring.profiles.active=dev,fast,但没有从 CacheConfiguration 获得“正在启动 Ehcache”日志记录。您确定您在程序 args 中而不是在 JVM args 中通过了配置文件选项吗?你试过mvn -Pfast spring-boot:run吗?
    • 我已经编辑了我的原始问题并添加了我的快速启动日志。您可以看到,虽然“Starting Ehcache”不存在,但 Ehcache 仍然发出警告,我认为它正在运行。当我添加特定的 JVM arg -Dnet.sf.ehcache.disabled=true 时,该部分日志提到它正在被抑制。
    • 已编辑的答案要求您创建问题
    • 当前的 jhipster 应用程序 (3.5.0) 不再具有“快速”配置文件,但这个技巧仍然有效,因为您可以轻松地将配置文件限制添加到配置类-
    猜你喜欢
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 2018-05-17
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    相关资源
    最近更新 更多