Грубо говоря, от высшего к низшему приоритету: аргументы командной строки, переменные среды, application-{profile}.yml, базовые записи application.yml, @PropertySource и, наконец, значения по умолчанию, жестко закодированные в классах @ConfigurationProperties. Это то, что позволяет одному и тому же артефакту сборки работать без изменений в разных средах, при этом переменные env переопределяют упакованную конфигурацию.
Пример
@WebMvcTest(OrderController.class)classOrderControllerTest {
@Autowired MockMvc mockMvc;
@MockBean OrderService orderService; // real service NOT loaded - only the web layer is@Testvoidreturns404WhenOrderMissing()throws Exception {
given(orderService.findById(1L)).willThrow(newOrderNotFoundException(1L));
mockMvc.perform(get("/api/orders/1"))
.andExpect(status().isNotFound())
.andExpect(jsonPath("$.code").value("ORDER_NOT_FOUND"));
}
}
Итог
Грубо говоря, от высшего к низшему приоритету: аргументы командной строки, переменные среды, application-{profile}.yml, базовые записи application.yml, @PropertySource и, наконец, значения по умолчанию, жестко закодированные в классах @ConfigurationProperties.
Каков порядок приоритета, если одно и то же свойство установлено в … · Sobeso