2015-12-03 92 views
1

我有兩個彈簧引導項目A和B.項目A是內置到jar中的公共庫;項目B是打包成戰爭的Web服務。項目B在pom.xml中依賴於A.項目A的application.yml沒有加載到項目B中,它依賴於A

在項目答:

@SpringBootApplication 
@PropertySource("classpath:application.yml") 
@ComponentScan({ "com.a" }) 
public class AppA { 

} 

@Configuration 
@ConfigurationProperties(prefix="a") 
@Data 
public class AConfig { 
    private String attr1; //in application.yml under project A's classpath 
} 

在項目中的下列測試通過:

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = AppA.class) 
public class SDTTokenServiceTest { 
    @Autowired 
    private AConfig aConfig; 

    @Test 
    public void testAConfig() { 
     Assert.assertNotNull(aConfig.getAtrr1()); 
    } 
} 

在項目B:

@SpringBootApplication 
@Import(AppA.class) 
@PropertySource("classpath:application.yml") 
@ComponentScan({ "com.b" }) 
public class AppB { 

} 

在項目B,下面的測試失敗原因到null屬性。

@RunWith(SpringJUnit4ClassRunner.class) 
@SpringApplicationConfiguration(classes = AppB.class) 
public class SDTTokenServiceTest { 
    @Autowired 
    private AConfig aConfig; 

    @Test 
    public void testAConfig() { 
     Assert.assertNotNull(aConfig.getAtrr1()); 
    } 
} 

爲什麼項目B無法獲得A中的屬性?我怎樣才能解決這個問題?謝謝!

更新: 兩個YAML文件是他們的類路徑下,也許這造成衝突時,項目B.後,我在項目中的YAML文件移動到不同的路徑classpath:config/application.yml進口項目A,那麼它工作正常。

有沒有人知道在這種情況下yaml文件是如何加載的?當他們都在自己的類路徑下時,爲什麼它不工作?謝謝!

+0

它在一個JAR/WAR中嗎? – luboskrnac

+0

@luboskrnac項目A是一個內置於一個罐子裏的通用庫;項目B是打包成戰爭的Web服務。 – snowery

回答

0

而不是使用@PropertySource註釋AppA,您應該在@ConfigurationProperties註釋中添加位置。

@Configuration 
@ConfigurationProperties(prefix="a", location={"classpath:application.yml"}) 
@Data 
public class AConfig { 
    private String attr1; //in application.yml under project A's classpath 
} 

@Import註釋用於導入@Configuration,不@SpringBootApplication

指示要導入的一個或多個{Configuration Configuration @ Configuration}類。

@SpringBootApplication 
@Import(AConfig.class) 
@PropertySource("classpath:application.yml") 
@ComponentScan({ "com.b" }) 
public class AppB { 

} 
+1

感謝您的回覆。我試過你的方法,但它仍然不起作用。我認爲這可能是這兩個項目之間的文件路徑和名稱衝突,B無法在A中加載配置。在將A中的yaml文件路徑移動到'classpath:config/application.yml'後,它會正常工作。 – snowery

相關問題