Spring Boot修改启动入参为Controller后无法启动web服务无法本地访问
问题根因
SpringApplication.run()的第一个入参需要是标注了@SpringBootApplication的主启动类,你传入的HelloWorld只是标注了@RestController的控制器类,不具备启动类的配置能力@SpringBootApplication注解内置了@ComponentScan、@EnableAutoConfiguration等核心注解:- 默认会扫描当前注解所在类的同包及子包下的Bean,你传入
HelloWorld类时,Spring Boot找不到对应的自动配置类,也不会加载web服务器的相关配置,所以直接抛出无法启动web服务器的异常 - 当你传入
HelloWorldRest1Application.class时,注解生效,会自动扫描到子包com.sw409.HelloWorldRest.services下的HelloWorld控制器,接口可以正常访问
- 默认会扫描当前注解所在类的同包及子包下的Bean,你传入
解决方案
直接修改HelloWorldRest1Application类的main方法入参即可,修改后的代码如下:
package com.sw409.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class HelloWorldRest1Application { public static void main(String[] args) { // 入参替换为带@SpringBootApplication注解的当前类 SpringApplication.run(HelloWorldRest1Application.class, args); } }
如果确实想要用HelloWorld类作为启动类,也可以在HelloWorld类上添加@SpringBootApplication注解,同时注意调整组件扫描的包路径覆盖所有需要注入的Bean即可,不推荐这种写法,控制器和启动类职责应该拆分。
内容的提问来源于stack exchange,提问作者user16952888
相关产品推荐
相关产品推荐

