**写在前面,最近在搞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 + 鼠标右键可以直接进人配置类
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除外),理由有两个 :
- java命名规范。我相信一个成熟的软件里的属性命名不会用下划线
- 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注入,及通过拦截器实现多租户。