提交 f7b4faf7 编写于 作者: 街头小贩's avatar 街头小贩

修复OnlineMemberEhcacheStorage的init方法执行两次,导致cache创建的CacheException

上级 bc780022
......@@ -13,10 +13,7 @@ import com.apobates.forum.utils.CookieUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.cache.jcache.JCacheCacheManager;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.cache.Cache;
import javax.cache.CacheManager;
import javax.cache.configuration.MutableConfiguration;
......@@ -42,14 +39,14 @@ public class OnlineMemberEhcacheStorage implements OnlineMemberStorage {
private final static String EHC_STORE = "olMemberSession";
private final static Logger logger = LoggerFactory.getLogger(OnlineMemberEhcacheStorage.class);
@PostConstruct
//使用PostConstruct会执行两次
//使用spring的init-method只会执行一次
public void init(){
logger.info("OnlineMemberEhcacheStorage postconstruct init");
MutableConfiguration<String,MemberSessionBean> configuration =
new MutableConfiguration<String,MemberSessionBean>()
.setTypes(String.class, MemberSessionBean.class)
.setStoreByValue(true)
.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(Duration.ONE_DAY));
MutableConfiguration<String,MemberSessionBean> configuration = new MutableConfiguration<String,MemberSessionBean>()
.setTypes(String.class, MemberSessionBean.class)
.setStoreByValue(true)
.setExpiryPolicyFactory(CreatedExpiryPolicy.factoryOf(Duration.ONE_DAY));
try {
cacheManager.getCacheManager().createCache(EHC_STORE, configuration);
}catch (Exception e){
......@@ -57,16 +54,6 @@ public class OnlineMemberEhcacheStorage implements OnlineMemberStorage {
}
}
@PreDestroy
public void close(){
logger.info("OnlineMemberEhcacheStorage postconstruct close");
try {
cacheManager.getCacheManager().destroyCache(EHC_STORE);
}catch (Exception e){
e.printStackTrace();
}
}
@Override
public void store(MemberSessionBean memberSessionBean, HttpServletRequest request, HttpServletResponse response) {
String passStub = rndStub();
......
......@@ -4,9 +4,9 @@ import java.io.IOException;
import javax.persistence.EntityManagerFactory;
import javax.servlet.Filter;
import javax.sql.DataSource;
import com.apobates.forum.utils.Commons;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.cache.jcache.JCacheCacheManager;
import org.springframework.cache.jcache.JCacheManagerFactoryBean;
import org.springframework.context.annotation.*;
......@@ -59,7 +59,6 @@ public class TridentAppConfig{
// 数据源
@Bean(value = "dataSource", initMethod = "init", destroyMethod = "close") // 假如没有指定名字,默认为方法名
public DataSource buildDataSource(JdbcProperties jdbcProperties) {
//
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName(jdbcProperties.getDriverClassName());
ds.setUrl(jdbcProperties.getUrl());
......@@ -89,7 +88,6 @@ public class TridentAppConfig{
}
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(JdbcProperties jdbcProperties, DataSource dataSource, JpaVendorAdapter jpaVendorAdapter){
//
LocalContainerEntityManagerFactoryBean aemf = new org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean();
aemf.setPersistenceUnitName(jdbcProperties.getJpaUnitName());
aemf.setDataSource(dataSource);
......@@ -105,16 +103,16 @@ public class TridentAppConfig{
return jtm;
}
//缓存|Ehcache 3.x is fully JSR-107 compliant and no dedicated support is required for it
@Bean
public JCacheManagerFactoryBean getCache() throws IOException {
@Bean("cacheManagerFactory")
public JCacheManagerFactoryBean cacheManagerFactory() throws IOException {
JCacheManagerFactoryBean jCacheManagerFactoryBean = new org.springframework.cache.jcache.JCacheManagerFactoryBean();
jCacheManagerFactoryBean.setCacheManagerUri(new ClassPathResource("ehcache.xml").getURI());
return jCacheManagerFactoryBean;
}
@Bean("cacheCacheManager")
public JCacheCacheManager ehCacheCacheManager(JCacheManagerFactoryBean jCache) throws IOException {
@Bean("cacheManager")
public JCacheCacheManager cacheManager(@Qualifier("cacheManagerFactory") JCacheManagerFactoryBean cacheManagerFactory) throws IOException {
JCacheCacheManager jCacheCacheManager = new org.springframework.cache.jcache.JCacheCacheManager();
jCacheCacheManager.setCacheManager(jCache.getObject());
jCacheCacheManager.setCacheManager(cacheManagerFactory.getObject());
jCacheCacheManager.setTransactionAware(true);
return jCacheCacheManager;
}
......
package com.apobates.forum.trident;
import java.util.List;
import com.apobates.forum.member.storage.ehcache.EhcacheMemberStorageCondition;
import com.apobates.forum.member.storage.ehcache.OnlineMemberEhcacheStorage;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.jcache.JCacheCacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
......@@ -247,17 +245,18 @@ public class TridentFrontConfig implements WebMvcConfigurer{
}
@Bean(name="onlineMemberStorage")
public OnlineMemberStorage getMemberStorage(CookieMetaConfig cookieConfig, @Nullable OnlineMemberEhcacheStorage ehcacheStorageProvider){
if(null == ehcacheStorageProvider) {
public OnlineMemberStorage getMemberStorage(CookieMetaConfig cookieConfig, @Nullable OnlineMemberEhcacheStorage ehcacheMemberStorage){
if(null == ehcacheMemberStorage) {
return new com.apobates.forum.member.storage.cookie.HttpCookieProvider(cookieConfig);
}
return ehcacheStorageProvider;
return ehcacheMemberStorage;
}
@Bean("ehcacheStorageProvider")
@Bean(value = "ehcacheMemberStorage", initMethod = "init")
@Conditional(EhcacheMemberStorageCondition.class)
public OnlineMemberEhcacheStorage getMemberEhacheStorage(CookieMetaConfig cookieConfig, JCacheCacheManager cacheCacheManager){
public OnlineMemberEhcacheStorage getMemberEhacheStorage(){
//ehcache
return new com.apobates.forum.member.storage.ehcache.OnlineMemberEhcacheStorage(cookieConfig, cacheCacheManager);
return new com.apobates.forum.member.storage.ehcache.OnlineMemberEhcacheStorage();
}
//图片存储
@Bean(name="imageIOConfig")
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册