@Bean
public Region<Long,Person> myPersonRegion(LocalRegionFactoryBean<Long, Person> personRegion) throws Exception {
return personRegion.getObject();
}
@Bean
public LocalRegionFactoryBean<Long, Person> personRegion(GemFireCache cache,AsyncEventQueue gemfireQueue) {
LocalRegionFactoryBean<Long, Person> personRegion = new LocalRegionFactoryBean<>();
personRegion.setCache(cache);
personRegion.setClose(false);
personRegion.setName("person");
personRegion.setAsyncEventQueues(new AsyncEventQueue[]{gemfireQueue});
personRegion.setPersistent(false);
return personRegion;
}
简短的回答是否定的;不完全是。
我也不完全确定你下面的说法是否完全准确...
我们使用Guava(或Hazelcast,redis等)的经验是,我们不需要显式定义缓存。
但是,在所有关键的GemFire或Apache Geode测试示例中,您必须显式地创建将在Spring的缓存基础结构中充当“缓存
”的区域。但是,SDG的GemfireCacheManager
实现将动态创建Spring的AOPCacheInterceptor
所需的SpringCacheInterceptor
对象(由底层区域支持)。
这将产生以下最小的必要配置,以启用Gemfire/Geode作为提供程序的缓存。
@SpringBootApplication
@EnableCaching
class MyCachingApplication {
public static void main(String[] args) {
SpringApplication.run(MyCachingApplication.class, args);
}
@Bean
GemfireCacheManager cacheManager(GemFireCache gemfireCache) {
GemfireCacheManager cacheManager = new GemfireCacheManager();
cacheManager.setCache(gemfireCache);
return cacheManager;
}
// define all Region beans required by the application including Regions
// used specifically in Spring's Cache Abstraction
}
现在,说了这些之后,我已经根据Spring Cache抽象注释(例如@cacheable
)建立了动态区域创建原型,在声明的应用程序[service]组件中使用这些注释,从这个测试开始就可以看到这些注释。下面是配置。
正如您所看到的,GemFire区域没有明确的bean定义,它们将在Spring的缓存基础结构中充当缓存
。然而,应用程序的(测试的)Spring@service
组件确实使用了缓存。
动态区域创建是通过使用SpringBeanPostProcessor
(这里)和GemFire函数(使用SDG的函数注释支持)在运行时和启动期间动态创建区域来实现的。这里定义了函数执行,这里定义了实际的函数实现。
这个示例非常粗糙(即不处理DataPolicy
)之外的自定义区域配置(例如,驱逐/过期、持久化、溢出等),并且当前设置为处理对等缓存拓扑(即测试应用程序是GemFire DS中的对等成员/节点)。
但是,很容易将这个原型扩展到客户机/服务器拓扑中,考虑所有Spring和JSR-107缓存注释,并允许更多的自定义区域配置。
随着时间的推移,这可能是我添加到SDG框架本身的东西。
希望这能有所帮助。
我已经挣扎了几天了。我对Spring Boot还是个新手,喜欢不使用XML配置的想法。 我创建了一个RESTfull应用程序(使用JSON)。我正在按照本教程正确配置身份验证。 可以使用 元素上的entry-point-ref属性设置AuthenticationEntryPoint。 没有提到任何关于如何使用Java配置来实现它的内容。 那么如何在不使用XML的情况下“注册”自己的以防止在使用Fo
我在我的web应用程序中使用Spring启动缓存支持,并将咖啡因设置为缓存提供程序。 我在我的项目中有几个缓存,其中大多数都有公共配置,但是对于两个特定的缓存,我需要设置不同的参数。 在我的中,我有类似的内容: 这是常见的缓存。然后我想使用自定义参数扩展此配置。 这篇文章解释了如何通过配置类配置缓存,但是使用这个方法我完全覆盖了常见的配置。 我需要的是这样的东西: 但是声明一个新的bean,“原始
问题内容: 我正在尝试设置spring xml配置,而不必创建进一步的。但是,即使我将数据库属性包括在 spring.xml: 我在这里想念什么? 问题答案: 在entityManagerFactory bean定义中指定“ packagesToScan”和“ persistenceUnitName”属性。 请注意,这适用于Spring版本> 3.1
我有一个Spring启动项目,它作为一个库(打包的jar文件)到其他一些项目。我试图哟配置咖啡因缓存,将异步刷新请求后,向服务。 pom.xml(包括): 我的配置类: DAO层(此处需要缓存): DAO层(这里也需要缓存): 运行此安装程序时,我遇到以下错误堆栈: 不确定设置中缺少什么?
我使用下面的代码(来自这个答案)来配置要记录在WebClient请求上的头: 这很管用,但感觉有点奇怪。问题是:我是否需要像这样包含Jackson/objectMapper配置,或者是否有更简单的方法来避免Spring objectMapper配置被覆盖?
我试图使用实体类和实体管理器将一条记录插入数据库(MySQL)。但是其中一个字段是自动递增的主键,所以除非我手动提供一个值,否则插入是不成功的。 如何解决这样的问题?是否有一种方法告诉实体管理器尝试不带ID字段的插入,而使用值。 更新:下面是定义的实体类的一部分