27 Haziran 2019 Perşembe

SpringBoot @EnableAutoConfiguration Anotasyonu

Giriş
Şu satırı dahil ederiz.
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
 - Bu anotasyon @SpringBootApplication tarafından otomatik olarak getirilir.
- @EnableAutoConfiguration ve @SpringBootApplication birlikte kullanılmamalıdır! Ya birisi ya da öbürü kullanılır. 

Bu Anotasyon Neleri AutoConfigure Edeceğini Nereden Biliyor?
Açıklaması şöyle.
On starting our application, Spring Boot checks for a specific file spring.factories in the META-INF directory of spring’s spring-boot-autoconfigure project. 
Dosya spring-boot-autoconfigure-2.1.3.RELEASE.jar içinde. Bu dosyadaki org.springframework.boot.autoconfigure.EnableAutoConfiguration alanında tüm sınıflar listelenmiş durumda ve liste çok uzun

Bu listedeki her sınıfta  @ConditionalOnClass anotasyonu var. Böylece bu sınıf belli koşullar yerine gelmişse AutoConfig işlemini yapıyor.

Kendi AutoConfiguration Sınıfımız
Kendi sınıfımız yazmak ta mümkün. Tek yapmamız gerek bir proje oluşturmak ve src/main/resources/META-INF/spring.factories dosyasına kendi sınıfımızın full path'ini belirterek eklemek. 
Örnek
Şöyle yaparız
# Auto configure classes.
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
com.vishnu.boot.logging.autoconfigure.MethodExecutionTimeAutoConfiguration

exclude Alanı
Belli bir auto configuration özelliğini devre dışı bırakmak içindir. Aslında exclude işlemi için bu anotasyonu kullanmaya gerek yok. Bunun için iki yöntem var

1. application.properties kullanılabilir
Örnek
Şöyle yaparız
spring.autoconfigure.exclude=
org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration,
org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration

2. @SpringBootApplication(exclude={...}) kullanılabilir
Örnek
Şöyle yaparız
@SpringBootApplication(exclude={GsonAutoConfiguration.class,JmxAutoConfiguratio.class}
scanBasePackages = {...}
)
Kullanım
Ancak illaki bu anotasyonu kendimiz kullanmak istersek şöyle yaparız

Örnek
Şöyle yaparız.
@EnableAutoConfiguration(exclude = { JndiConnectionFactoryAutoConfiguration.class,
 DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class,
 JpaRepositoriesAutoConfiguration.class,
 DataSourceTransactionManagerAutoConfiguration.class })
Örnek
Şöyle yaparız.
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class,
  DataSourceTransactionManagerAutoConfiguration.class,
  HibernateJpaAutoConfiguration.class})

Hiç yorum yok:

Yorum Gönder