当前位置: 首页 > 知识库问答 >
问题:

在运行时修改Ehcache配置

高宇定
2023-03-14

我在Spring框架中使用ehcache。我正在使用ehcache.xml初始化ehcache。然而,我想在运行时添加某些属性,如terracottaconfig。为此,我覆盖了类EhCacheManagerFactoryBean。目前,我正在覆盖这个类的方法getObject()(我不知道这是否是一个正确的覆盖,因为在使用ehcache.xml文件初始化类之前,调用了其他方法setResources()和AftiesSet()。)

这是我的Spring配置文件

<bean id="cacheManager"
class="com.dexknows.util.CustomEhCacheManagerFactoryBean">
<property name="configLocation">
   <value>file:///${vp_data_dir}/ehcache.xml</value>
</property>     
<property name="terracottaConfigUrl" value="#{dexProperties['terracottaConfig.Url']}"/>
</bean>

这是我重写的类方法

public class CustomEhCacheManagerFactoryBean extends EhCacheManagerFactoryBean {

    private String terracottaConfigUrl;
    private Resource resourceConfiguration;

    @Override
    public void setConfigLocation(Resource configLocation) {            
        super.setConfigLocation(configLocation);
    }

    @Override
    public void afterPropertiesSet() throws IOException, CacheException {

        super.afterPropertiesSet();
    }


    @Override
    public CacheManager getObject() {

        CacheManager manager = super.getObject();

        TerracottaClientConfiguration terracottaClientConfiguration = new TerracottaClientConfiguration();
        terracottaClientConfiguration.setRejoin(true);
        terracottaClientConfiguration.setUrl(terracottaConfigUrl);



        manager.getConfiguration().setDynamicConfig(true);
        manager.getConfiguration().terracotta(terracottaClientConfiguration);

Configuration().terracotta(terracottaClientConfiguration)));
    return manager;

    }

    public String getTerracottaConfigUrl() {
        return terracottaConfigUrl;
    }

    public void setTerracottaConfigUrl(String terracottaConfigUrl) {
        this.terracottaConfigUrl = terracottaConfigUrl;
    }

}

我得到以下例外:

创建名为cacheManager的bean时出错:FactoryBean在对象创建时抛出异常;嵌套异常java.lang.IllegalStateException:net.sf.ehcache.config.Configuration.dynamic配置不能动态更改

我已设置dynamicConfig=“true”

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="ehcache.xsd"
         updateCheck="false"
         monitoring="autodetect"
         dynamicConfig="true"
         name="xyz">

共有2个答案

方嘉志
2023-03-14

只有几个动态特性:

  • 空闲秒的时间
  • 生存时间秒
  • 内存中的最大元素
  • 磁盘上的最大元素

他们在官方的Javadocs中提到。旧金山。ehcache。配置。缓存配置(“动态配置”)。

葛驰
2023-03-14

在分析EhCacheManagerFactoryBean类的源代码后,我发现“terracottaConfigConfiguration”不能动态更改。只有enum DynamicProperty中提到的属性可以动态更改。尽管如此,如果有人找到文档,提到同样的内容,这将是有益的。

 类似资料:
  • 问题内容: 我有一些人已经解决过的问题,但问题是我不了解我的实现中缺少什么。 我的hibernate代码的一部分如下: 问题是我想通过更改hibernate.connection.url属性中的“数据库”一词来选择要在运行时中使用的数据库。 在javaswing中,我正在实现此功能: } 然后,我用按钮检查所做的更改,从组合框中选择所需的数据库: 现在,debug1的输出正在更改,因此我在此打印中

  • 我需要在运行时更改与数据库的连接。例如,如果请求的参数是BD1,则连接数据库1,如果是BD2,则连接数据库2,等等。 我用的是Spring靴。最好的方法是什么。 我有这个,但不知道说我的存储库如何使用。

  • 我正在Eclipse JDT中开发一个项目,它对OSGI有可选的依赖性--也就是说,它支持作为OSGI包使用,如果它在OSGI环境中作为包使用,它还将引用OSGI中的一些类。 现在我想编写JUnit测试用例,既可以在OSGI内部运行,也可以在不运行OSGI的情况下运行,包含在两个不同的测试套件中。OSGI测试作为JUnit Pulg-in测试运行,而非OSGI测试应该作为普通JUnit测试运行。

  • 问题内容: 而且我正在尝试更改方法注释,但是java.lang.reflect.Method不包含任何地图字段(例如“ annotations”)或方法(例如“ getDeclaredAnnotationMap”) 只有但是我可以用这个字节数组做什么? 那么,如何修改方法的注释呢? 编辑: 我创建了:http : //pastebin.com/T2rewcwU 但是,仅编辑此方法实例,如果取消注释

  • 问题内容: 我们在模型pojos中的一些方法已被注释为: columnDefinition 属性取决于数据库供应商,因此在尝试使用Hibernate删除HSQLDB中的架构时会失败: 为了解决这个问题,我正在考虑这个解决方案(但不想花时间,如果不可能的话),在运行时,为每个方法列加注: 获取@Column批注 创建列注释的副本,使用javaassist将columnDefinition设置为nul

  • 我想在服务器运行时在运行时添加或删除SpringCloudGateway路由。我正在使用Fluent Java Routes API初始化网关路由。这是完美的工作。 但是,现在我想在SpringCloudGateway服务器运行时修改、添加和删除路由。我可以看到RouteLocator包含我的路由,但我看不到修改其内容的方法。 尽管我看到一些在执行器中创建新路由的能力,但我需要使用Java代码而不