about spring boot how to disable web environment correctly

后端 未结 2 1461
南笙
南笙 2020-12-05 18:53

Spring boot non-web application, when start it has below error

Caused by: org.springframework.context.ApplicationContextException: Unable to start EmbeddedWe         


        
2条回答
  •  -上瘾入骨i
    2020-12-05 19:28

    This answer is obsolete. Please note the other answer for Spring Boot 2.0

    Original answer for Spring Boot 1.x:

    The reason this config is not working because these are two different instances:

    new SpringApplication().setWebEnvironment(false); 
    SpringApplication.run(SpringBootDisableWebEnvironmentApplication.class, args);
    

    You are disabling setWebEnvironment(false) in new SpringApplication() object and calling static method run() on SpringApplication.run(...) which is different one.

    I figured out 3 ways to do this:

    @SpringBootApplication
    public class SpringBootDisableWebEnvironmentApplication implements CommandLineRunner{
    
    
        public static void main(String[] args) throws Exception {
    
    //      Method#1: Using SpringApplicationBuilder.
    
            SpringApplication springApplication = 
                    new SpringApplicationBuilder()
                    .sources(SpringBootDisableWebEnvironmentApplication.class)
                    .web(false)
                    .build();
    
            springApplication.run(args);
    
    //--------------------------------------------------------      
    
    //      Method#2: Using SpringBootDisableWebEnvironmentApplication.     
    
    //      SpringBootDisableWebEnvironmentApplication springBootDisableWebEnvironmentApplication = 
    //              new SpringBootDisableWebEnvironmentApplication();
    //      springBootDisableWebEnvironmentApplication.run(args);
    
    //--------------------------------------------------------      
    
    //      Method#3: Using SpringApplication().
    
    //      SpringApplication springApplication = new SpringApplication();
    //      springApplication.setWebEnvironment(false);
    //      
    //      Set sources = new HashSet<>();
    //      sources.add(SpringBootDisableWebEnvironmentApplication.class);
    //      springApplication.setSources(sources);
    //      springApplication.run(args);
    
    //--------------------------------------------------------  
    
        }
    
        @Override
        public void run(String... arg0) throws Exception {
            System.out.println("Hello, Spring Boot gives many options ;)");
        }
    }
    
    
    

    Here is the complete working Project.

    And you don't need to exclude below config:

    @SpringBootApplication(exclude = {EmbeddedServletContainerAutoConfiguration.class, 
                                  WebMvcAutoConfiguration.class})
    

    Because you don't have spring-boot-starter-web dependency in your pom.xml

    
        org.springframework.boot
        spring-boot-starter-web
        
    

    提交回复
    热议问题