spring-boot中间件配置

**写在前面,最近在搞spring boot项目集成radis,redis-cluster,rabbitmq,mybatis。各种百度都是给个
基本上都是给个现成的配置。根本不知道他们有哪些东西可以配置。以及为什么要怎么配置。
这篇文章是记录spring boot 项目集成中间件。包含spring boot自动集成的和第三方自己实现start集成的。**

spring-boot自带的中间件配置

	每个spring-boot/spring-cloud项目都会有个org.springframework.boot:spring-boot-autoconfigure依赖,
然后下面有个spring.factories文件(自动配置的入口文件)打开它,搜索要配置的中间件,如我要配置reids
ctrl + 鼠标右键可以直接进人配置类

spring boot 启动的时加载的自动配置
redis自动配置类:

@Configuration
@ConditionalOnClass(RedisOperations.class)
@EnableConfigurationProperties(RedisProperties.class)
@Import({
    
     LettuceConnectionConfiguration.class, JedisConnectionConfiguration.class })
public class RedisAutoConfiguration {
    
    

	@Bean
	@ConditionalOnMissingBean(name = "redisTemplate")
	public RedisTemplate<Object, Object> redisTemplate(
			RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
    
    
		RedisTemplate<Object, Object> template = new RedisTemplate<>();
		template.setConnectionFactory(redisConnectionFactory);
		return template;
	}

	@Bean
	@ConditionalOnMissingBean(StringRedisTemplate.class)
	public StringRedisTemplate stringRedisTemplate(
			RedisConnectionFactory redisConnectionFactory) throws UnknownHostException {
    
    
		StringRedisTemplate template = new StringRedisTemplate();
		template.setConnectionFactory(redisConnectionFactory);
		return template;
	}

}

从启动文件可以看出来springboot redis支持Lettuce和jedis客户端。配置文件是RedisProperties。
打开RedisConnectionFactory可以看到支持单机redis,sentinel,cluster 3种模式(完全不需要自己再去配置)
在这里插入图片描述

私有属性就是我们yml文件里的配置项。具体含义用idea把源码下载下来,里面都有。
晚上看到好多配置文件里会出现配置项是用中滑线命名的。这里不建议,配置项就用驼峰命名不会出错(prefix除外),理由有两个 :

  1. java命名规范。我相信一个成熟的软件里的属性命名不会用下划线
  2. spring boot自动配置都会有个properties类(spring 官方建议配置,看看这些中间件start源码就知道了)

第三方自己实现开发start组件实现自动配置

同spring-boot自带配置找到第三方实现的start依赖。查看spring.factories。以mybatis-plus为例
可以直接搜索
在这里插入图片描述
打开MybatisPlusAutoConfiguration看看。
别的我也看不懂,就知道属性映射类是MybatisPlusProperties。值得注意的是在注入默认SqlSessionFactory时会有注入自动填充器,主键生成器,sql注入器。如果自己的配置文件里注入了SqlSessionFactory。那么上面自动注入的也需要手动注入(在我下面省略的代码里都有,有兴趣的可以看下)。

@org.springframework.context.annotation.Configuration
@ConditionalOnClass({
    
    SqlSessionFactory.class, SqlSessionFactoryBean.class})
@ConditionalOnSingleCandidate(DataSource.class)
@EnableConfigurationProperties(MybatisPlusProperties.class)
@AutoConfigureAfter(DataSourceAutoConfiguration.class)
public class MybatisPlusAutoConfiguration {
    
    

    private static final Logger logger = LoggerFactory.getLogger(MybatisPlusAutoConfiguration.class);

    private final MybatisPlusProperties properties;

    private final Interceptor[] interceptors;

    private final ResourceLoader resourceLoader;

    private final DatabaseIdProvider databaseIdProvider;

    private final List<ConfigurationCustomizer> configurationCustomizers;

    private final ApplicationContext applicationContext;

    public MybatisPlusAutoConfiguration(MybatisPlusProperties properties,
                                        ObjectProvider<Interceptor[]> interceptorsProvider,
                                        ResourceLoader resourceLoader,
                                        ObjectProvider<DatabaseIdProvider> databaseIdProvider,
                                        ObjectProvider<List<ConfigurationCustomizer>> configurationCustomizersProvider,
                                        ApplicationContext applicationContext) {
    
    
        this.properties = properties;
        this.interceptors = interceptorsProvider.getIfAvailable();
        this.resourceLoader = resourceLoader;
        this.databaseIdProvider = databaseIdProvider.getIfAvailable();
        this.configurationCustomizers = configurationCustomizersProvider.getIfAvailable();
        this.applicationContext = applicationContext;
    }

    @PostConstruct
    public void checkConfigFileExists() {
    
    
        if (this.properties.isCheckConfigLocation() && StringUtils.hasText(this.properties.getConfigLocation())) {
    
    
            Resource resource = this.resourceLoader.getResource(this.properties.getConfigLocation());
            Assert.state(resource.exists(), "Cannot find config location: " + resource
                + " (please add config file or check your Mybatis configuration)");
        }
    }
。。。下面还有很多重要信息,限于篇幅省略了。。。    

有兴趣的可以打开MybatisPlusProperties文件看看。看完之后就会明白yml该怎么配置了。
后续会介绍相关Bean注入,及通过拦截器实现多租户。

猜你喜欢

转载自blog.csdn.net/wfl_137724/article/details/104423350