答:Starter 是围绕某种用途整理的一组依赖入口,帮你引入常见配套库;自动配置再依据类路径、已有 Bean 和属性决定怎样组装。它减少依赖选择的重复工作,却不保证业务开箱即用。Starter、版本管理 BOM、自动配置代码和构建插件各有职责,不能混成一个功能。
答:常用入口是 SpringBootApplication,它组合配置类、自动配置和组件扫描语义。其他注解应按职责理解:Bean 提供对象,ConfigurationProperties 表达配置绑定,Profile 控制环境候选,RestController 声明 Web 入口,Transactional 声明事务规则。它们不都来自 Boot,也不都仅靠标记就生效。
答:普通 Boot 的常见配置入口是 application.properties、application.yaml 或 application.yml;bootstrap 文件属于某些 Spring Cloud 引导机制的语境,不是所有 Boot 应用都必需的第二份核心配置。先看实际依赖与加载方式,再判断文件是否生效,不应只凭名字断言总是先加载且不能被覆盖。
答:常用 properties 与 YAML,YAML 可用 .yaml 或 .yml 后缀。两者都能表达应用属性,区别主要在书写结构,不是 YAML 天然更快或更安全。项目应选清楚一致的入口;同一位置混放相同名称的不同格式时,还要了解优先级,避免以为两份值会按肉眼顺序合并。
答:构建期可继承 starter-parent,或导入 dependencies BOM 管理版本;运行期则由 SpringApplication 等启动容器,并通过 SpringBootApplication 或 EnableAutoConfiguration 选择自动配置。只继承一个 Maven parent 不会自动启动程序,只有 main 方法也不保证依赖版本已经管理好。
答:不必。选择合适 Web starter 后,应用可以带着嵌入式服务器运行,也可按要求打成 WAR 部署到兼容的外部 Servlet 容器。非 Web 应用甚至不需要 HTTP 容器。部署形式与业务代码分开选择,并检查当前 Boot 所要求的 Servlet 和 Java 版本。
答:常见方式是 IDE 运行 main、Maven/Gradle 插件启动、打包后 java -jar、镜像运行,以及兼容场景下外部容器部署 WAR。它们最终都要加载应用与配置,只是启动和交付入口不同。开发方便与生产可复现应分别考虑,不能把本机启动成功当作部署验收。
答:启动入口导入自动配置候选,再按类路径、已有对象、属性和应用类型等条件筛选,符合条件的配置向容器提供 Bean。用户显式配置常可使对应默认配置退让,但要看具体条件。自动配置不是替你猜业务,也不是扫描所有依赖类后全部实例化。
答:通常按构建工具约定组织源码与资源:main/java 放应用代码,main/resources 放配置和资源,test 放测试;启动类位于合理根包,业务按职责或领域分包。Boot没有要求所有项目只能长成同一棵目录树,重要的是扫描、资源加载和依赖方向清楚。
答:常用 ApplicationRunner 或 CommandLineRunner,在容器启动流程中执行初始化任务;前者接收解析后的应用参数,后者接收原始字符串数组。多个runner可按顺序规则组织,但不应依赖未声明的扫描先后。它们不是HTTP请求,也不是每个实例只会在整个集群里执行一次。