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注入,及通過攔截器實現多租戶。

發佈了55 篇原創文章 · 獲贊 8 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章