Spring Boot با تنظیمات اتوماتیکی که دارد کمک میکند سریعتر محیط کدنویسی را آماده کنیم و تمرکز اصلی را روی پیاده سازی منطق کد کنیم ولی گاهی ما این تنظیمات اتوماتیک را نمیخواهیم و دوست داریم تنظیمات دلخواه خودمان را اعمال کنیم در این بخش ما به دو روش غیر فعال کردن این تنظیمات برای دو دیتابیس Redis و MongoDB و Spring Data JPA میپردازیم
روش غیر فعال سازی با Annotation :
کافی است کلاس هایی که این تنظیمات اتوماتیک را انجام میدهند بصورت Exclude ست کنیم :
Mongo :
@SpringBootApplication(exclude = { MongoAutoConfiguration.class, MongoDataAutoConfiguration.class })
Redis :
@SpringBootApplication(exclude = { RedisAutoConfiguration.class, RedisRepositoryAutoConfiguration.class })
Spring Data JPA :
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class, HibernateJpaAutoConfiguration.class })
روش غیر فعال سازی با فایل Properties در Spring Boot :
Mongo :
spring.autoconfigure.exclude= \ org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration, \ org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration
Redis :
spring.autoconfigure.exclude= \ org.springframework.boot.autoconfigure.data.redis.RedisAutoConfiguration, \ org.springframework.boot.autoconfigure.data.redis.RedisRepositoriesAutoConfiguration
Spring Data JPA :
spring.autoconfigure.exclude= \ org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration, \ org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration, \ org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration
Test کردن غیر فعال بودن تنظیمات اتوماتیک :
وقتی این تنظیمات اتوماتیک توسط Spring Boot ست میشود یکسری Bean برای کار بصورت اتوماتیک ایجاد میشود که وقتی ساخته نشوند متوجه میشویم که تنظیمات اتوماتیک اعمال نشده
برای تست MongoDB نبود MongoTemplate Bean را چک میکنیم :
@Test(expected = NoSuchBeanDefinitionException.class) public void givenAutoConfigDisabled_whenStarting_thenNoAutoconfiguredBeansInContext() { context.getBean(MongoTemplate.class); }
برای تست Redis نبود RedisTemplate Bean را چک میکنیم :
@Test(expected = NoSuchBeanDefinitionException.class) public void givenAutoConfigDisabled_whenStarting_thenNoAutoconfiguredBeansInContext() { context.getBean(RedisTemplate.class); }
برای تست Spring Data JPA نبود DataSource Bean را چک میکنیم :
@Test(expected = NoSuchBeanDefinitionException.class) public void givenAutoConfigDisabled_whenStarting_thenNoAutoconfiguredBeansInContext() { context.getBean(DataSource.class); }