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

如何以编程方式覆盖xml文件中的ehcache配置集?或者如何将CacheLoaderWriter bean设置为ehcache xml配置?

双弘益
2023-03-14

我想使用Ehcache使用读通和写通缓存策略,我正在使用XML配置来配置Ehcache,我想将spring bean(CacheLoaderWriter实现)设置为缓存配置,但我不能使用XML配置,因为Ehcache使用默认构造函数实例化bean,spring DI将不起作用,所以,我如何覆盖/设置spring管理的CacheLoaderWriter bean,以缓存java配置中XML配置文件中定义的缓存?

我尝试在我的XML文件中设置CacheLoaderWriter类如下

<cache alias="employeeEntityCache">
     <key-type>java.lang.Long</key-type>
     <value-type>com.example.spring.cahce.model.Employee</value-type>
     <loader-writer>
<class>com.example.spring.cahce.stragegy.readwritethrough.EmployeeEntityLoaderWriter</class>
      </loader-writer>
      <resources>
                <heap unit="entries">100</heap>
      </resources>
</cache>

但是,如果Ehcache实例化LoaderWriter bean,那么spring DI将无法工作

我的java配置,从xml加载缓存配置

    @Bean
    @Qualifier("jcachexml")
    public javax.cache.CacheManager jCacheCacheManager() {

        CachingProvider cachingProvider = Caching.getCachingProvider();
        try {
            javax.cache.CacheManager manager = cachingProvider.getCacheManager(
                    getClass().getResource("/ehcache-jsr107-config.xml").toURI(),
                    getClass().getClassLoader());
            return manager;
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
        return null;
     }

我想要一种覆盖Ehcache XML配置中设置的缓存配置的方法,这样我就可以将spring托管的CacheLoaderWriter bean设置为缓存配置,并可以使用DI注入依赖项

共有1个答案

华心思
2023-03-14

Ehacache3.8.0增加了新的功能配置派生,我们可以使用它来覆盖配置,

参考配置推导

因此,我能够通过java配置中的XML配置覆盖,并将CacheLoaderWriter设置为完全初始化的Spring bean。

@Autowired
private EmployeeEntityLoaderWriter employeeEntityLoaderWriter;

@Bean
@Qualifier("jcachexml")
public javax.cache.CacheManager jCacheCacheManager() {
   final XmlConfiguration xmlConfiguration = new XmlConfiguration(getClass().getResource("/ehcache-jsr107-config.xml"));
    CacheConfiguration modifiedEmployeeCacheConfiguration = xmlConfiguration.getCacheConfigurations().get("employeeEntityCache");

    // override cache configuration (specific to employee cache) from xml (Set  CacheLoderWriter)
    modifiedEmployeeCacheConfiguration = modifiedEmployeeCacheConfiguration
            .derive()
            .withLoaderWriter(employeeEntityLoaderWriter).build();

    // get updated configuration (at CacheManager level)
    org.ehcache.config.Configuration modifiedConfiguration = xmlConfiguration
            .derive()
            .withCache("employeeEntityCache", modifiedEmployeeCacheConfiguration)
            .build();

    // get CacheManager (Jcache) with above updated configuration
    final EhcacheCachingProvider ehcacheCachingProvider = (EhcacheCachingProvider) Caching.getCachingProvider();
    final javax.cache.CacheManager manager = ehcacheCachingProvider.getCacheManager(ehcacheCachingProvider.getDefaultURI(), modifiedConfiguration);

    return manager;
}
 类似资料:
  • 问题内容: 是否可以覆盖已经在中配置的附加程序的“文件”属性,而无需创建新的附加程序?如果是的话-怎么样? 这是这种情况:我有两个apender,A1是ConsoleAppender,而A2是FileAppender。A2的“文件”指出了一个一般性error.log: 此附加程序仅记录错误级别的事件,或更糟糕的是 。 现在,我希望根据导致错误的类将这些错误写入不同的文件中,因为正在创建实例的类有多

  • 如何在Spring Boot应用程序中设置活动配置文件。该应用程序将部署在独立的Tomcat中。 我有2个属性文件应用程序-{profile}。属性。

  • 问题内容: 我想将配置文件名称设置为整个程序包,但我不知道如何。如果在哪里不是简单的方法,那么我必须用注释标记包和子包中的每个类。 标签不支持这样的属性,所以我不知道。 问题答案: 您可以将个人资料设置为: 文件-用于xml配置 Java配置类 在它们的每一个中,您都可以对特定的软件包使用组件扫描。

  • 我想在不同的 VM 上配置 Ehcache 实例,并在主机上运行 servlet,将这些缓存用作数据存储。缓存服务器必须形成一个集群,用于分布式缓存。 我搜索了任何地方(谷歌、stackoverflow、Ehachep留档)。但是,我找不到任何足够的“如何”文章。此外,我不可能使用企业产品(Terracotta BigMemory等)。 可以随意假设元素包含如上所述的客户信息。我只需要知道如何通过

  • 我正在尝试使用设置log4j2以写入日志。我希望以编程方式配置日志记录系统,而不是使用XML文件。 以下是我尝试过的内容(大部分与网站上的文档相同)https://logging.apache.org/log4j/2.x/manual/customconfig.html#Configurator): 我在main方法的开头调用方法。当我运行我的程序时,会创建一个名为的文件,但是所有日志输出都会转到

  • 问题内容: 我正在使用Spring 3.1.1.RELEASE,Hibernate 4.1.0.Final和JPA 2.0。有没有一种方法可以配置Spring事务以在不使用Java代码的情况下执行事务后提交?换句话说,我想将刷新模式设置为在应用程序上下文文件,hibernate配置文件或persistence.xml文件中提交。我的Spring交易服务类看起来像 我的应用程序上下文设置如下: 我的