赞
踩
因为项目需要,需通过统一配置中心读取redis的配置信息,而springBoot默认读取的配置信息的前缀为 spring.redis。
步骤如下:
1.需要读取的配置文件 redis.properties
- redis.host=192.168.1.10
- redis.port=6379
2.程序启动读取配置文件
SpringBoot启动类添加注解 @PropertySource(value = {"classpath:config/redis.properties"})
- @SpringBootApplication
- @PropertySource(value = {"classpath:config/redis.properties"})
- public class Application {
-
- public static void main(String[] args) throws IOException {
- SpringApplication.run(KscrmApplication.class, args);
- }
- }
3.配置RedisConnectionFactory初始化时读取文件中等值
(1)引入相关依赖
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-data-redis</artifactId>
- </dependency>
- <dependency>
- <groupId>redis.clients</groupId>
- <artifactId>jedis</artifactId>
- <version>2.9.0</version>
- </dependency>
(2)配置类
- @Configuration
- @ConditionalOnClass(RedisOperations.class)
- @EnableConfigurationProperties(RedisProperties.class)
- @Component
- public class RedisAutoConfiguration {
-
- @Value("${redis.host}")
- private String host;
- @Value("${redis.port}")
- private int port;
-
- @Bean
- public RedisConnectionFactory connectionFactory() {
- JedisPoolConfig poolConfig = new JedisPoolConfig();
- JedisClientConfiguration clientConfig = JedisClientConfiguration.builder()
- .usePooling().poolConfig(poolConfig).and().build();
- // 单点redis
- RedisStandaloneConfiguration redisConfig = new RedisStandaloneConfiguration();
- redisConfig.setHostName(host);
- redisConfig.setPort(port);
-
- return new JedisConnectionFactory(redisConfig,clientConfig);
- }
-
- @Bean
- @ConditionalOnMissingBean(name = "redisTemplate")
- public RedisTemplate<Object, Object> redisTemplate() {
- RedisTemplate<Object, Object> template = new RedisTemplate<>();
- //使用fastjson序列化
- FastJsonRedisSerializer fastJsonRedisSerializer = new FastJsonRedisSerializer(Object.class);
- // value值的序列化采用fastJsonRedisSerializer
- template.setValueSerializer(fastJsonRedisSerializer);
- template.setHashValueSerializer(fastJsonRedisSerializer);
- // key的序列化采用StringRedisSerializer
- template.setKeySerializer(new StringRedisSerializer());
- template.setHashKeySerializer(new StringRedisSerializer());
-
- template.setConnectionFactory(connectionFactory());
- return template;
- }
-
- @Bean
- @ConditionalOnMissingBean(StringRedisTemplate.class)
- public StringRedisTemplate stringRedisTemplate() {
- StringRedisTemplate template = new StringRedisTemplate();
- template.setConnectionFactory(connectionFactory());
- return template;
- }
-
- }

其中FastJsonRedisSerializer类为序列化相关类
- public class FastJsonRedisSerializer<T> implements RedisSerializer<T> {
-
- public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
-
- private Class<T> clazz;
-
- public FastJsonRedisSerializer(Class<T> clazz) {
- super();
- this.clazz = clazz;
- }
-
- @Override
- public byte[] serialize(T t) throws SerializationException {
- if (null == t) {
- return new byte[0];
- }
- return JSON.toJSONString(t, SerializerFeature.WriteClassName).getBytes(DEFAULT_CHARSET);
-
- }
-
- @Override
- public T deserialize(byte[] bytes) throws SerializationException {
- if (null == bytes || bytes.length <= 0) {
- return null;
- }
- String str = new String(bytes, DEFAULT_CHARSET);
- return (T) JSON.parseObject(str, clazz);
-
- }
- }

Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。