PersistConfiguration.java 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. /**
  2. * 文件名:@PersistConfiguration.java <br/>
  3. * 包名:tv.acfun.base.configuration <br/>
  4. * 项目名:acfun-base-provider <br/>
  5. * @author xtwin <br/>
  6. */
  7. package cn.efunbox.manage.base.configuration;
  8. import com.alibaba.druid.pool.DruidDataSource;
  9. import com.fasterxml.jackson.annotation.JsonAutoDetect;
  10. import com.fasterxml.jackson.annotation.PropertyAccessor;
  11. import com.fasterxml.jackson.databind.ObjectMapper;
  12. import org.slf4j.Logger;
  13. import org.slf4j.LoggerFactory;
  14. import org.springframework.boot.autoconfigure.domain.EntityScan;
  15. import org.springframework.boot.bind.RelaxedPropertyResolver;
  16. import org.springframework.cache.CacheManager;
  17. import org.springframework.context.EnvironmentAware;
  18. import org.springframework.context.annotation.Bean;
  19. import org.springframework.core.env.Environment;
  20. import org.springframework.data.redis.cache.RedisCacheManager;
  21. import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
  22. import org.springframework.data.redis.core.*;
  23. import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
  24. import org.springframework.data.redis.serializer.StringRedisSerializer;
  25. import javax.sql.DataSource;
  26. /**
  27. * 类名:PersistConfiguration <br />
  28. *
  29. * 功能:持久化相关配置
  30. *
  31. * @author xtwin <br />
  32. * 创建时间:2016年7月26日 上午9:56:48 <br />
  33. * @version 2016年7月26日
  34. */
  35. @EntityScan(basePackages={"cn.efunbox.manage.base.entity"})
  36. public class PersistConfiguration implements EnvironmentAware {
  37. // 日志记录器
  38. private static final Logger logger = LoggerFactory.getLogger(PersistConfiguration.class);
  39. // 应用环境信息
  40. private Environment environment;
  41. //缓存管理器
  42. @Bean
  43. public CacheManager cacheManager(@SuppressWarnings("rawtypes") RedisTemplate redisTemplate) {
  44. RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
  45. //设置缓存过期时间
  46. cacheManager.setDefaultExpiration(10000);
  47. return cacheManager;
  48. }
  49. @Bean(name="redisTemplate")
  50. public RedisTemplate<String, Object> redisTemplate(JedisConnectionFactory factory){
  51. String index = environment.getProperty("spring.redis.database", "0");
  52. RedisTemplate<String, Object> template = new RedisTemplate<>();
  53. template.setConnectionFactory(factory);
  54. factory.setDatabase(Integer.parseInt(index));
  55. Jackson2JsonRedisSerializer jackson2JsonRedisSerializer=new Jackson2JsonRedisSerializer(Object.class);
  56. ObjectMapper om=new ObjectMapper();
  57. om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
  58. om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
  59. jackson2JsonRedisSerializer.setObjectMapper(om);
  60. template.setKeySerializer(new StringRedisSerializer());
  61. template.setValueSerializer(jackson2JsonRedisSerializer);
  62. template.setDefaultSerializer(jackson2JsonRedisSerializer);
  63. template.setHashValueSerializer(jackson2JsonRedisSerializer);
  64. template.setHashKeySerializer(new StringRedisSerializer());
  65. template.afterPropertiesSet();
  66. return template;
  67. }
  68. /**
  69. * 实例化 HashOperations 对象,可以使用 Hash 类型操作
  70. *
  71. * @param redisTemplate
  72. * @return
  73. */
  74. @Bean
  75. public HashOperations<String, String, Object> hashOperations(RedisTemplate redisTemplate) {
  76. return redisTemplate.opsForHash();
  77. }
  78. /**
  79. * 实例化 ValueOperations 对象,可以使用 String 操作
  80. *
  81. * @param redisTemplate
  82. * @return
  83. */
  84. @Bean
  85. public ValueOperations<String, Object> valueOperations(RedisTemplate redisTemplate) {
  86. return redisTemplate.opsForValue();
  87. }
  88. /**
  89. * 实例化 ListOperations 对象,可以使用 List 操作
  90. *
  91. * @param redisTemplate
  92. * @return
  93. */
  94. @Bean
  95. public ListOperations<String, Object> listOperations(RedisTemplate redisTemplate) {
  96. return redisTemplate.opsForList();
  97. }
  98. /**
  99. * 实例化 SetOperations 对象,可以使用 Set 操作
  100. *
  101. * @param redisTemplate
  102. * @return
  103. */
  104. @Bean
  105. public SetOperations<String, Object> setOperations(RedisTemplate redisTemplate) {
  106. return redisTemplate.opsForSet();
  107. }
  108. /**
  109. * 实例化 ZSetOperations 对象,可以使用 ZSet 操作
  110. *
  111. * @param redisTemplate
  112. * @return
  113. */
  114. @Bean
  115. public ZSetOperations<String, Object> zSetOperations(RedisTemplate redisTemplate) {
  116. return redisTemplate.opsForZSet();
  117. }
  118. /**
  119. * 功能:创建数据源 <br/>
  120. *
  121. * @author xtwin <br/>
  122. * @version 2016年7月27日 上午10:00:02 <br/>
  123. */
  124. protected DataSource createDataSource(String prefix) throws Exception {
  125. // 创建属性解析器,用于读取配置信息
  126. RelaxedPropertyResolver resolver = new RelaxedPropertyResolver(environment, prefix);
  127. // 创建数据源对象
  128. DruidDataSource dataSource = new DruidDataSource();
  129. // 数据库连接url
  130. dataSource.setUrl(resolver.getRequiredProperty("spring.datasource.url"));
  131. // 用户名
  132. dataSource.setUsername(resolver.getRequiredProperty("spring.datasource.username"));
  133. // 密码
  134. dataSource.setPassword(resolver.getRequiredProperty("spring.datasource.password"));
  135. // 驱动
  136. dataSource.setDriverClassName(resolver.getProperty("spring.datasource.driver-class-name"));
  137. // 连接池初始大小
  138. dataSource.setInitialSize(resolver.getProperty("initial_size", int.class, dataSource.getInitialSize()));
  139. // 连接池最小空闲大小
  140. dataSource.setMinIdle(resolver.getProperty("min_idle", int.class, dataSource.getMinIdle()));
  141. // 连接池最大连接数
  142. dataSource.setMaxActive(resolver.getProperty("max_active", int.class, dataSource.getMaxActive()));
  143. // 连接最大等待时间
  144. dataSource.setMaxWait(resolver.getProperty("max_wait", long.class, dataSource.getMaxWait()));
  145. // 在连接池空闲时,测试连接是否可以
  146. dataSource.setTestWhileIdle(resolver.getProperty("test_while_idle", boolean.class, dataSource.isTestWhileIdle()));
  147. // 在连接池空闲时,测试连接是否可以
  148. dataSource.setTestOnBorrow(resolver.getProperty("test_on_borrow", boolean.class, dataSource.isTestOnBorrow()));
  149. // 在连接池空闲时,测试连接语句
  150. dataSource.setValidationQuery(resolver.getRequiredProperty("validation_query"));
  151. return dataSource;
  152. }
  153. /**
  154. * 功能: 由spring注入环境信息 <br/>
  155. *
  156. * 重写:xtwin <br/>
  157. *
  158. * @version :2016年7月27日 上午10:02:15<br/>
  159. *
  160. * @param environment <br/>
  161. * @see EnvironmentAware#setEnvironment(Environment)
  162. */
  163. @Override
  164. public void setEnvironment(Environment environment) {
  165. this.environment = environment;
  166. }
  167. }