springboot自定义配置应用详解
Posted Fire king
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot自定义配置应用详解相关的知识,希望对你有一定的参考价值。
springboot自定义配置应用详解
1.springboot自定义配置的几种实现方法:
- 新生成一种自动配置
- 针对已有的自动配置类配置的一些bean修改
- 针对已有的自动配置类的属性的值做修改
2.一些可能会用到的注解:
@EnableConfigurationProperties(XXXProperties.class)
@Import(XXXConfiguration.class,XXXConnectionConfiguration.class)
@EnableConfigurationProperties(XXXProperties.class)
标注在某个Configuration类上,可以将XXXProperties.class
封装的一些属性的值传递给被此注解标注的Configuration类
,具体使用可以是在某个方法的入参注入如XXXProperties.class properties
,同时@Import(XXXConfiguration.class,XXXConnectionConfiguration.class)
和@EnableConfigurationProperties(XXXProperties.class)
标注在同一个Configuration类上也可以协同作用,具体用法是@Import(XXXConfiguration.class,XXXConnectionConfiguration.class)中的XXXConfiguration.class
或者XXXConnectionConfiguration.class
类中的方法也跟上面一样在入参中传入XXXProperties.class properties
。
3.自定义配置类参考模板
最后,针对2写出一个XXXConfiguration.class的模板如下:
@Configuration
@EnableConfigurationProperties(XXXProperties.class)//可以可无,不过建议写,高端一点
@Import(XXXConfiguration.class,XXXConnectionConfiguration.class) //可有可无,主要是想让导入的类使用@EnableConfigurationProperties(XXXProperties.class)的XXXProperties.class的属性
public class XXXConfiguration
@Bean
//自定义返回的bean,可以通过注入XXXProperties.class和XXXConfiguration.class以及XXXConnectionConfiguration.class达到自定义bean的属性来实现自定义配置类。
4.属性赋值
Configuration类
和@Import(XXXConfiguration.class,XXXConnectionConfiguration.class)
属性取值
.XXXProperties.class
+prefix = "XXX.XXX"
@ConfigurationProperties(
prefix = "spring.rabbitmq" //yml或者properties文件里面属性的前缀,前缀加具体属性名就对应RabbitProperties 的属性名,值自然而然也会取到
)
public class RabbitProperties
- XXXProperties.class+@Value(“$yiml文件全属性名”)
public class RabbitProperties
@Value("$yiml文件全属性名")
private String xxx;
- 最粗糙的方法:直接在需要取值的属性名上加@Value(“$yiml文件全属性名”)
5.技巧
自定义技巧:针对自动配置中属性默认值为某个类对象,若想换成其他实现,可以寻找知道能看到类似命名的实现类的抽象类即可。
自定义配置也可以在自动配置之后,以此做修改:
@EnableCaching
@Configuration
@AutoConfigureAfter(RedisAutoConfiguration.class)
@Slf4j
public class RedisConfiguration
*/
/**
* 配置自定义redisTemplate
*
* @param connectionFactory
* @return
*//*
@Bean
public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory)
RedisTemplate<String, Object> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
template.setValueSerializer(jackson2JsonRedisSerializer()); //使用StringRedisSerializer来序列化和反序列化redis的key值
template.setKeySerializer(jackson2JsonRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(jackson2JsonRedisSerializer());
template.afterPropertiesSet();
log.info("加载Redis模板方法:", template.getClass());
return template;
*/
/**
* json序列化
*
* @return
*//*
@Bean
public RedisSerializer<Object> jackson2JsonRedisSerializer() //使用Jackson2JsonRedisSerializer来序列化和反序列化redis的value值
Jackson2JsonRedisSerializer serializer = new Jackson2JsonRedisSerializer(Object.class);
ObjectMapper mapper = new ObjectMapper();
mapper.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
mapper.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);
serializer.setObjectMapper(mapper);
log.info("加载Redis序列化方法:", serializer.getClass());
return serializer;
*/
/**
* 配置缓存管理器
*
* @param redisConnectionFactory
* @return
*//*
@Bean
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) // 生成一个默认配置,通过config对象即可对缓存进行自定义配置
RedisCacheConfiguration config = RedisCacheConfiguration.defaultCacheConfig(); // 设置缓存的默认过期时间,也是使用Duration设置
config = config.entryTtl(Duration.ofMinutes(1)) // 设置 key为string序列化
.serializeKeysWith(RedisSerializationContext.SerializationPair.fromSerializer(new StringRedisSerializer())) // 设置value为json序列化
.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(jackson2JsonRedisSerializer())) // 不缓存空值
.disableCachingNullValues(); // 设置一个初始化的缓存空间set集合
RedisCacheManager cacheManager = RedisCacheManager.builder(redisConnectionFactory) // 一定要先调用该方法设置初始化的缓存名,再初始化相关的配置
//.initialCacheNames(cacheNames)
//.withInitialCacheConfigurations(configMap)
.build();
log.info("加载Redis缓存管理器:", cacheManager.getClass());
return cacheManager;
与50位技术专家面对面
20年技术见证,附赠技术全景图
以上是关于springboot自定义配置应用详解的主要内容,如果未能解决你的问题,请参考以下文章