Enable configuration property in test without loading full Spring Boot application context










0















Assume we have Spring Boot application and want to load only specific slice of application context.



Particularly load YAML file configuration and map spring.datasource to DataSourceProperties marked by @ConfigurationProperties.



Naive not working declaration of test is:



@RunWith(SpringRunner.class)
@ContextConfiguration(
classes = DataSourceAutoConfiguration.class, DataSourceProperties.class,
loader = AnnotationConfigContextLoader.class,
initializers = ConfigFileApplicationContextInitializer.class)
@TestPropertySource("classpath:application.yaml", "classpath:application-dev.yaml")
@EnableConfigurationProperties(DataSourceProperties.class)
@Slf4j
public class HibernateTest
@Autowired
private DataSourceProperties dataSourceProperties;

@Test
public void dataSourceTest() throws SQLException
log.info("DS URL: ", dataSourceProperties.getUrl());




application-dev.yaml has:



spring.datasource:
url: jdbc:oracle:thin:@localhost:1521/APP


Test prints:



DS URL: null


I am looking for a way to map YAML config to @ConfigurationProperties marked class (DataSourceProperties) and make it used by @Configuration class (DataSourceAutoConfiguration) without loading any other services/components/etc...










share|improve this question






















  • why don't you use excludeFilters={ @ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE, value=Foo.class) in component scan

    – Deadpool
    Nov 11 '18 at 0:24











  • @Deadpool It's what I'm trying to avoid. I don't want to search for excludes if I need only 2 to include!

    – gavenkoa
    Nov 11 '18 at 7:53











  • can you be more specific please, exclude will not create beans for that classes

    – Deadpool
    Nov 11 '18 at 7:56











  • Why don't you just use the out-of-the-box support for testing application slices, e.g. @DataJpaTestand @WebMvcTest?

    – AlexB
    Nov 12 '18 at 15:24
















0















Assume we have Spring Boot application and want to load only specific slice of application context.



Particularly load YAML file configuration and map spring.datasource to DataSourceProperties marked by @ConfigurationProperties.



Naive not working declaration of test is:



@RunWith(SpringRunner.class)
@ContextConfiguration(
classes = DataSourceAutoConfiguration.class, DataSourceProperties.class,
loader = AnnotationConfigContextLoader.class,
initializers = ConfigFileApplicationContextInitializer.class)
@TestPropertySource("classpath:application.yaml", "classpath:application-dev.yaml")
@EnableConfigurationProperties(DataSourceProperties.class)
@Slf4j
public class HibernateTest
@Autowired
private DataSourceProperties dataSourceProperties;

@Test
public void dataSourceTest() throws SQLException
log.info("DS URL: ", dataSourceProperties.getUrl());




application-dev.yaml has:



spring.datasource:
url: jdbc:oracle:thin:@localhost:1521/APP


Test prints:



DS URL: null


I am looking for a way to map YAML config to @ConfigurationProperties marked class (DataSourceProperties) and make it used by @Configuration class (DataSourceAutoConfiguration) without loading any other services/components/etc...










share|improve this question






















  • why don't you use excludeFilters={ @ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE, value=Foo.class) in component scan

    – Deadpool
    Nov 11 '18 at 0:24











  • @Deadpool It's what I'm trying to avoid. I don't want to search for excludes if I need only 2 to include!

    – gavenkoa
    Nov 11 '18 at 7:53











  • can you be more specific please, exclude will not create beans for that classes

    – Deadpool
    Nov 11 '18 at 7:56











  • Why don't you just use the out-of-the-box support for testing application slices, e.g. @DataJpaTestand @WebMvcTest?

    – AlexB
    Nov 12 '18 at 15:24














0












0








0








Assume we have Spring Boot application and want to load only specific slice of application context.



Particularly load YAML file configuration and map spring.datasource to DataSourceProperties marked by @ConfigurationProperties.



Naive not working declaration of test is:



@RunWith(SpringRunner.class)
@ContextConfiguration(
classes = DataSourceAutoConfiguration.class, DataSourceProperties.class,
loader = AnnotationConfigContextLoader.class,
initializers = ConfigFileApplicationContextInitializer.class)
@TestPropertySource("classpath:application.yaml", "classpath:application-dev.yaml")
@EnableConfigurationProperties(DataSourceProperties.class)
@Slf4j
public class HibernateTest
@Autowired
private DataSourceProperties dataSourceProperties;

@Test
public void dataSourceTest() throws SQLException
log.info("DS URL: ", dataSourceProperties.getUrl());




application-dev.yaml has:



spring.datasource:
url: jdbc:oracle:thin:@localhost:1521/APP


Test prints:



DS URL: null


I am looking for a way to map YAML config to @ConfigurationProperties marked class (DataSourceProperties) and make it used by @Configuration class (DataSourceAutoConfiguration) without loading any other services/components/etc...










share|improve this question














Assume we have Spring Boot application and want to load only specific slice of application context.



Particularly load YAML file configuration and map spring.datasource to DataSourceProperties marked by @ConfigurationProperties.



Naive not working declaration of test is:



@RunWith(SpringRunner.class)
@ContextConfiguration(
classes = DataSourceAutoConfiguration.class, DataSourceProperties.class,
loader = AnnotationConfigContextLoader.class,
initializers = ConfigFileApplicationContextInitializer.class)
@TestPropertySource("classpath:application.yaml", "classpath:application-dev.yaml")
@EnableConfigurationProperties(DataSourceProperties.class)
@Slf4j
public class HibernateTest
@Autowired
private DataSourceProperties dataSourceProperties;

@Test
public void dataSourceTest() throws SQLException
log.info("DS URL: ", dataSourceProperties.getUrl());




application-dev.yaml has:



spring.datasource:
url: jdbc:oracle:thin:@localhost:1521/APP


Test prints:



DS URL: null


I am looking for a way to map YAML config to @ConfigurationProperties marked class (DataSourceProperties) and make it used by @Configuration class (DataSourceAutoConfiguration) without loading any other services/components/etc...







spring spring-boot spring-test






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 10 '18 at 21:11









gavenkoagavenkoa

22.7k9140183




22.7k9140183












  • why don't you use excludeFilters={ @ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE, value=Foo.class) in component scan

    – Deadpool
    Nov 11 '18 at 0:24











  • @Deadpool It's what I'm trying to avoid. I don't want to search for excludes if I need only 2 to include!

    – gavenkoa
    Nov 11 '18 at 7:53











  • can you be more specific please, exclude will not create beans for that classes

    – Deadpool
    Nov 11 '18 at 7:56











  • Why don't you just use the out-of-the-box support for testing application slices, e.g. @DataJpaTestand @WebMvcTest?

    – AlexB
    Nov 12 '18 at 15:24


















  • why don't you use excludeFilters={ @ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE, value=Foo.class) in component scan

    – Deadpool
    Nov 11 '18 at 0:24











  • @Deadpool It's what I'm trying to avoid. I don't want to search for excludes if I need only 2 to include!

    – gavenkoa
    Nov 11 '18 at 7:53











  • can you be more specific please, exclude will not create beans for that classes

    – Deadpool
    Nov 11 '18 at 7:56











  • Why don't you just use the out-of-the-box support for testing application slices, e.g. @DataJpaTestand @WebMvcTest?

    – AlexB
    Nov 12 '18 at 15:24

















why don't you use excludeFilters={ @ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE, value=Foo.class) in component scan

– Deadpool
Nov 11 '18 at 0:24





why don't you use excludeFilters={ @ComponentScan.Filter(type=FilterType.ASSIGNABLE_TYPE, value=Foo.class) in component scan

– Deadpool
Nov 11 '18 at 0:24













@Deadpool It's what I'm trying to avoid. I don't want to search for excludes if I need only 2 to include!

– gavenkoa
Nov 11 '18 at 7:53





@Deadpool It's what I'm trying to avoid. I don't want to search for excludes if I need only 2 to include!

– gavenkoa
Nov 11 '18 at 7:53













can you be more specific please, exclude will not create beans for that classes

– Deadpool
Nov 11 '18 at 7:56





can you be more specific please, exclude will not create beans for that classes

– Deadpool
Nov 11 '18 at 7:56













Why don't you just use the out-of-the-box support for testing application slices, e.g. @DataJpaTestand @WebMvcTest?

– AlexB
Nov 12 '18 at 15:24






Why don't you just use the out-of-the-box support for testing application slices, e.g. @DataJpaTestand @WebMvcTest?

– AlexB
Nov 12 '18 at 15:24













1 Answer
1






active

oldest

votes


















0














Those links answer my questions:




  • https://jira.spring.io/browse/SPR-13912
    Add support for YAML files to @PropertySource (Resolution: Unresolved).


  • https://jira.spring.io/browse/SPR-16563
    Document that @PropertySource and @TestPropertySource do not support YAML.


  • https://github.com/spring-projects/spring-boot/issues/12388
    Property Override not Working For YML Files.


  • https://github.com/spring-projects/spring-boot/issues/10772
    Map properties in yaml from TestPropertySource not working in boot 2.0.0.

In short Spring Framework developers don't want to support YAML format for @TestPropertySource & @PropertySource annotation explaining that YAML support in Spring Boot made in tricky way / broken way (though I lost in explanations).



After switching code to use .properties files my test works fine.






share|improve this answer






















    Your Answer






    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "1"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53243443%2fenable-configuration-property-in-test-without-loading-full-spring-boot-applicati%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    Those links answer my questions:




    • https://jira.spring.io/browse/SPR-13912
      Add support for YAML files to @PropertySource (Resolution: Unresolved).


    • https://jira.spring.io/browse/SPR-16563
      Document that @PropertySource and @TestPropertySource do not support YAML.


    • https://github.com/spring-projects/spring-boot/issues/12388
      Property Override not Working For YML Files.


    • https://github.com/spring-projects/spring-boot/issues/10772
      Map properties in yaml from TestPropertySource not working in boot 2.0.0.

    In short Spring Framework developers don't want to support YAML format for @TestPropertySource & @PropertySource annotation explaining that YAML support in Spring Boot made in tricky way / broken way (though I lost in explanations).



    After switching code to use .properties files my test works fine.






    share|improve this answer



























      0














      Those links answer my questions:




      • https://jira.spring.io/browse/SPR-13912
        Add support for YAML files to @PropertySource (Resolution: Unresolved).


      • https://jira.spring.io/browse/SPR-16563
        Document that @PropertySource and @TestPropertySource do not support YAML.


      • https://github.com/spring-projects/spring-boot/issues/12388
        Property Override not Working For YML Files.


      • https://github.com/spring-projects/spring-boot/issues/10772
        Map properties in yaml from TestPropertySource not working in boot 2.0.0.

      In short Spring Framework developers don't want to support YAML format for @TestPropertySource & @PropertySource annotation explaining that YAML support in Spring Boot made in tricky way / broken way (though I lost in explanations).



      After switching code to use .properties files my test works fine.






      share|improve this answer

























        0












        0








        0







        Those links answer my questions:




        • https://jira.spring.io/browse/SPR-13912
          Add support for YAML files to @PropertySource (Resolution: Unresolved).


        • https://jira.spring.io/browse/SPR-16563
          Document that @PropertySource and @TestPropertySource do not support YAML.


        • https://github.com/spring-projects/spring-boot/issues/12388
          Property Override not Working For YML Files.


        • https://github.com/spring-projects/spring-boot/issues/10772
          Map properties in yaml from TestPropertySource not working in boot 2.0.0.

        In short Spring Framework developers don't want to support YAML format for @TestPropertySource & @PropertySource annotation explaining that YAML support in Spring Boot made in tricky way / broken way (though I lost in explanations).



        After switching code to use .properties files my test works fine.






        share|improve this answer













        Those links answer my questions:




        • https://jira.spring.io/browse/SPR-13912
          Add support for YAML files to @PropertySource (Resolution: Unresolved).


        • https://jira.spring.io/browse/SPR-16563
          Document that @PropertySource and @TestPropertySource do not support YAML.


        • https://github.com/spring-projects/spring-boot/issues/12388
          Property Override not Working For YML Files.


        • https://github.com/spring-projects/spring-boot/issues/10772
          Map properties in yaml from TestPropertySource not working in boot 2.0.0.

        In short Spring Framework developers don't want to support YAML format for @TestPropertySource & @PropertySource annotation explaining that YAML support in Spring Boot made in tricky way / broken way (though I lost in explanations).



        After switching code to use .properties files my test works fine.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 12 '18 at 20:13









        gavenkoagavenkoa

        22.7k9140183




        22.7k9140183



























            draft saved

            draft discarded
















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53243443%2fenable-configuration-property-in-test-without-loading-full-spring-boot-applicati%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            𛂒𛀶,𛀽𛀑𛂀𛃧𛂓𛀙𛃆𛃑𛃷𛂟𛁡𛀢𛀟𛁤𛂽𛁕𛁪𛂟𛂯,𛁞𛂧𛀴𛁄𛁠𛁼𛂿𛀤 𛂘,𛁺𛂾𛃭𛃭𛃵𛀺,𛂣𛃍𛂖𛃶 𛀸𛃀𛂖𛁶𛁏𛁚 𛂢𛂞 𛁰𛂆𛀔,𛁸𛀽𛁓𛃋𛂇𛃧𛀧𛃣𛂐𛃇,𛂂𛃻𛃲𛁬𛃞𛀧𛃃𛀅 𛂭𛁠𛁡𛃇𛀷𛃓𛁥,𛁙𛁘𛁞𛃸𛁸𛃣𛁜,𛂛,𛃿,𛁯𛂘𛂌𛃛𛁱𛃌𛂈𛂇 𛁊𛃲,𛀕𛃴𛀜 𛀶𛂆𛀶𛃟𛂉𛀣,𛂐𛁞𛁾 𛁷𛂑𛁳𛂯𛀬𛃅,𛃶𛁼

            Edmonton

            Crossroads (UK TV series)