/** * 文件名:@PersistConfiguration.java
* 包名:tv.acfun.base.configuration
* 项目名:acfun-base-provider
* @author xtwin
*/ package cn.efunbox.manage.base.configuration; import com.alibaba.druid.pool.DruidDataSource; import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.databind.ObjectMapper; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.autoconfigure.domain.EntityScan; import org.springframework.boot.bind.RelaxedPropertyResolver; import org.springframework.cache.CacheManager; import org.springframework.context.EnvironmentAware; import org.springframework.context.annotation.Bean; import org.springframework.core.env.Environment; import org.springframework.data.redis.cache.RedisCacheManager; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import org.springframework.data.redis.core.*; import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; import org.springframework.data.redis.serializer.StringRedisSerializer; import javax.sql.DataSource; /** * 类名:PersistConfiguration
* * 功能:持久化相关配置 * * @author xtwin
* 创建时间:2016年7月26日 上午9:56:48
* @version 2016年7月26日 */ @EntityScan(basePackages={"cn.efunbox.manage.base.entity"}) public class PersistConfiguration implements EnvironmentAware { // 日志记录器 private static final Logger logger = LoggerFactory.getLogger(PersistConfiguration.class); // 应用环境信息 private Environment environment; //缓存管理器 @Bean public CacheManager cacheManager(@SuppressWarnings("rawtypes") RedisTemplate redisTemplate) { RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate); //设置缓存过期时间 cacheManager.setDefaultExpiration(10000); return cacheManager; } @Bean(name="redisTemplate") public RedisTemplate redisTemplate(JedisConnectionFactory factory){ String index = environment.getProperty("spring.redis.database", "0"); RedisTemplate template = new RedisTemplate<>(); template.setConnectionFactory(factory); factory.setDatabase(Integer.parseInt(index)); Jackson2JsonRedisSerializer jackson2JsonRedisSerializer=new Jackson2JsonRedisSerializer(Object.class); ObjectMapper om=new ObjectMapper(); om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY); om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL); jackson2JsonRedisSerializer.setObjectMapper(om); template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(jackson2JsonRedisSerializer); template.setDefaultSerializer(jackson2JsonRedisSerializer); template.setHashValueSerializer(jackson2JsonRedisSerializer); template.setHashKeySerializer(new StringRedisSerializer()); template.afterPropertiesSet(); return template; } /** * 实例化 HashOperations 对象,可以使用 Hash 类型操作 * * @param redisTemplate * @return */ @Bean public HashOperations hashOperations(RedisTemplate redisTemplate) { return redisTemplate.opsForHash(); } /** * 实例化 ValueOperations 对象,可以使用 String 操作 * * @param redisTemplate * @return */ @Bean public ValueOperations valueOperations(RedisTemplate redisTemplate) { return redisTemplate.opsForValue(); } /** * 实例化 ListOperations 对象,可以使用 List 操作 * * @param redisTemplate * @return */ @Bean public ListOperations listOperations(RedisTemplate redisTemplate) { return redisTemplate.opsForList(); } /** * 实例化 SetOperations 对象,可以使用 Set 操作 * * @param redisTemplate * @return */ @Bean public SetOperations setOperations(RedisTemplate redisTemplate) { return redisTemplate.opsForSet(); } /** * 实例化 ZSetOperations 对象,可以使用 ZSet 操作 * * @param redisTemplate * @return */ @Bean public ZSetOperations zSetOperations(RedisTemplate redisTemplate) { return redisTemplate.opsForZSet(); } /** * 功能:创建数据源
* * @author xtwin
* @version 2016年7月27日 上午10:00:02
*/ protected DataSource createDataSource(String prefix) throws Exception { // 创建属性解析器,用于读取配置信息 RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(environment, prefix); // 创建数据源对象 DruidDataSource dataSource = new DruidDataSource(); // 数据库连接url dataSource.setUrl(resolver.getRequiredProperty("spring.datasource.url")); // 用户名 dataSource.setUsername(resolver.getRequiredProperty("spring.datasource.username")); // 密码 dataSource.setPassword(resolver.getRequiredProperty("spring.datasource.password")); // 驱动 dataSource.setDriverClassName(resolver.getProperty("spring.datasource.driver-class-name")); // 连接池初始大小 dataSource.setInitialSize(resolver.getProperty("initial_size", int.class, dataSource.getInitialSize())); // 连接池最小空闲大小 dataSource.setMinIdle(resolver.getProperty("min_idle", int.class, dataSource.getMinIdle())); // 连接池最大连接数 dataSource.setMaxActive(resolver.getProperty("max_active", int.class, dataSource.getMaxActive())); // 连接最大等待时间 dataSource.setMaxWait(resolver.getProperty("max_wait", long.class, dataSource.getMaxWait())); // 在连接池空闲时,测试连接是否可以 dataSource.setTestWhileIdle(resolver.getProperty("test_while_idle", boolean.class, dataSource.isTestWhileIdle())); // 在连接池空闲时,测试连接是否可以 dataSource.setTestOnBorrow(resolver.getProperty("test_on_borrow", boolean.class, dataSource.isTestOnBorrow())); // 在连接池空闲时,测试连接语句 dataSource.setValidationQuery(resolver.getRequiredProperty("validation_query")); return dataSource; } /** * 功能: 由spring注入环境信息
* * 重写:xtwin
* * @version :2016年7月27日 上午10:02:15
* * @param environment
* @see EnvironmentAware#setEnvironment(Environment) */ @Override public void setEnvironment(Environment environment) { this.environment = environment; } }