2016-03-24 31 views
2

Aşağıdaki sınıf var:Spring Boot'da özellik enjeksiyonu çalışması için gerekli ve yeterli koşullar nelerdir?

dependencies { 
    compile('org.springframework.boot:spring-boot-starter-jdbc') 
    compile('org.springframework.boot:spring-boot-configuration-processor') 

application.properties aşağıdaki satırı var:

@ConfigurationProperties 
public class Database { 

    ... 

    @Value("${database.driver-class-name}") 
    public void setDriverClassName(String driverClassName) { 
     ... 
    } 

build.gradle aşağıdaki bağımlılıklar var

database.driver-class-name=com.mysql.jdbc.Driver 

Test sınıfına aşağıdaki ek açıklamaları var :

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(DatabaseTest.Context.class) 
@EnableConfigurationProperties 
public class DatabaseTest { 

    @Configuration 
    public static class Context { 

     @Bean 
     public Database database() { 
     Database ans = new Database(); 
     return ans; 
     } 

    } 

    @Autowired 
    public Database database; 

ve yine de özellik dosyasından özellik enjekte etmez ve bazı hata iletisiyle yemin eder.

Başka ne istiyor?

Özellik dosyasından püskürtme özellikleri için gerekli ve yeterli koşullar nelerdir?

udpate

Numune deposu: https://github.com/dims12/MinimalRequrementsToInjectPropertiesFromFile

cevap

1

Maalesef bulunabilir, bir cevap buldum.

Spring Boot söz konusu olduğunda, bir içerik yapılandırma sınıfı genellikle @SpringBootApplication ile açıklanır, bu da özellik dosyalarının otomatik olarak bulunması gibi birçok şeye neden olur. Bu, eski ek açıklamanın içerdiği @EnableAutoConfiguration tarafından çağrılır.

Benim durumumda, yalnızca sınaması içerisindeydim, düz @Configuration ek açıklamasına sahip, içerik yapılandırma sınıfına açıklama ekledim ve bir uygulama olmadığını düşündüm. Bu durumda açıkça @EnableAutoConfiguration ekleyecektim.

Muhtemelen, @SpringBootApplication ile içerik yapılandırma sınıfına açıklama eklenmesine izin verildi, ancak test etmedim.

@EnableConfigurationProperties'a hiç gerek duyulmamıştır. Ayrıca @ConfigurationProperties ve AutowiredAnnotationBeanPostProcessor'a gerek yoktur.

2

Sizin classınıza @configurationProperties özellik değerlerini enjekte etmek bahar @Bean veya @Component ek açıklama olmalıdır. özellikleri hakkında daha fazla bilgi here

@ConfigurationProperties 
@Component // or @Bean 
public class Database { 
+0

Fasulyeyi '@ Bileşen 'ile eklediğimde,' Bağlam 'dan kaldırmalı mıyım? – Dims

+0

Bunu yaparsanız, 'Context' iç sınıfını tamamen kaldırabilirsiniz. – luboskrnac

+0

Yine de çalışmıyor. Sınıfı tamamen kaldırırsam, yutmaya gerek kalmadan yapılandırılamaz. Boş sınıfı koruyup '@ ComponentScan' ifadesini eklediysem çalışır, ancak özellikleri enjekte etmez. – Dims