springboot自定义配置应用详解

1.springboot自定义配置的几种实现方法:

  1. 新生成一种自动配置
  2. 针对已有的自动配置类配置的一些bean修改
  3. 针对已有的自动配置类的属性的值做修改

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})属性取值

  1. .XXXProperties.class+ prefix = "XXX.XXX"
@ConfigurationProperties(
    prefix = "spring.rabbitmq" //yml或者properties文件里面属性的前缀,前缀加具体属性名就对应RabbitProperties 的属性名,值自然而然也会取到
)
public class RabbitProperties {
}
  1. XXXProperties.class+@Value(“${yiml文件全属性名}”)
public class RabbitProperties {
@Value("${yiml文件全属性名}")
private String xxx;
}
  1. 最粗糙的方法:直接在需要取值的属性名上加@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;
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fire king

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值