2015-12-03 1 views
1

У меня есть два проекта загрузки весны A и B. Проект A - это общая библиотека, встроенная в банку; проект B - это веб-службы, упакованные в войну. Проект B имеет зависимость от A в pom.xml.Проект A. application.yml не был загружен в проект B, который имеет зависимость от A

В проекте 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, следующий тест не удалось из к нулевому свойству.

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

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

Почему проект B не может получить свойства в A? Как я могу это исправить? Благодаря!

Update: Оба YAML файлов находятся под их классами, может быть, что создает конфликт при импорте проект А на проект B. После того, как я переехал файл YAML в проекте А на другой путь classpath:config/application.yml, то он работает правильно.

Кто-нибудь знает, как загружаются файлы yaml в этой ситуации? Почему это не работает, когда все они находятся под их собственным путом классов? Благодаря!

+0

Это один JAR/WAR? – luboskrnac

+0

@luboskrnac Project A - это общая библиотека, встроенная в банку; проект B - это веб-службы, упакованные в войну. – snowery

ответ

0

Вместо аннотации AppA с @PropertySource, вы должны добавить местоположение в @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.

Показывает один или несколько классов {@link Configuration @Configuration} для импорта.

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

} 
+1

Спасибо за ваш ответ. Я попробовал ваш метод, он все равно не работает. Я думал, что это может быть путь к файлу и имена конфликтов между этими двумя проектами, которые B не может загрузить конфигурацию в A. После того, как я переместил путь файла yaml в A в classpath: config/application.yml, он работает правильно. – snowery

Смежные вопросы