# boot **Repository Path**: webthree/boot ## Basic Information - **Project Name**: boot - **Description**: springboot演示项目 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-07-18 - **Last Updated**: 2025-04-10 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # boot > spring boot2 演示程序 ## 手册 - [spring-boot](https://springdoc.cn/spring-boot/) - [apolloconfig](https://www.apolloconfig.com/#/zh/README) - [版本对应关系](https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E) ## 开发知识 ### SpringBoot启动原理 > - spring-boot-maven-plugin -> spring-boot-loader-tools > - spring-boot-loader模块让你的springboot应用具备打包为可执行jar或war文件的能力 > - 在jar文件中,我们必须要将mainclass的入口的那个类放于jar包的根目录中,否则无法启动该jar文件 > - jar文件中不能够在套嵌jar文件 ```text 为什么不直接将BootApplication.class放于根目录中呢? 这样做理论上是可以的,但是随之面临的就是第三方jar包也要全部解压出来放置于该应用jar包的根目录, 因为jar规范中是不允许再含有jar包的。那么有人就会说那就全拿出来放在根目录中呗? 那这样就会出现包名重复的问题。所以我们需要一个启动类来帮我们实现,那就是spring-boot-loader ``` ## 技术栈 - zuul - eureka - openfeign - hystrix - shiro - spring-security - swagger - lombok - mybatis - druid - mysql - guava - apache-commons - apollo - snakeyaml - drools - kie - spring-boot-starter-validation - spring-boot-starter-data-redis - spring-boot-starter-actuator - spring-boot-devtools - spring-boot-starter-test ## 配置说明 ### SpringBoot #### 自动配置 - 1)spring.factories ```text EnableAutoConfiguration:用于注册自动配置类。Spring Boot会根据这些类自动配置应用程序 EnvironmentPostProcessor:用于在Spring Boot应用启动前对环境进行修改。这些处理器可以通过spring.factories文件进行配置 ApplicationListener:用于监听Spring Boot应用的生命周期事件,如启动、关闭等。这些监听器也可以通过spring.factories文件进行配置 ApplicationContextInitializer:用于在应用上下文初始化时执行特定的操作 AutoConfigurationImportListener:用于监听自动配置导入事件 AutoConfigurationImportFilter:用于过滤自动配置类 ``` #### 创建Spring应用 ###### 方式一 ```java public class BootApplication { public static void main(String[] args) { new SpringApplicationBuilder(BootApplication.class).run(args); SpringApplication.run(BootApplication.class, args); } } ``` ###### 方式二 ```java public class BootApplication { public static void main(String[] args) { SpringApplication application = new SpringApplication(BootApplication.class); application.run(args); } } ``` #### 创建监听器 ###### 配置方式 - application.properties ```properties context.listener.classes=xyz.lisys.hook.MyApplicationListener ``` ###### 编程方式 ```java public class BootApplication { public static void main(String[] args) { SpringApplication application = new SpringApplication(BootApplication.class); application.addListeners(); application.run(args); } } ``` #### 启用servlet注解并进行扫描 - 1)配置BootApplication.java ```java @ServletComponentScan public class BootApplication { } ``` #### 启用熔断器并配置openFeign - 1)配置BootApplication.java ```java @EnableHystrix @EnableFeignClients(basePackages = {"xyz.lisys.boot.client"}) public class BootApplication { } ``` ## Issue - swagger2无法启动? > 因Springfox 使用的路径匹配是基于AntPathMatcher的,而Spring Boot 2.6.X使用的是PathPatternMatcher - bootstrap.yml无法加载启动? > SpringBoot 2.4.x的版本之后(我们合起来成为Bootstrap配置文件)的支持,需要导入如下的依赖 ```xml org.springframework.cloud spring-cloud-starter-bootstrap ``` - Apollo加载为什么会加载application? ```text 1、spring-boot配置文件中指定namespaces的同时增加了@EnableApolloConfig会造成这样的问题 2、如果@EnableApolloConfig加上注解后会默认加载application配置项 ``` - spring boot 自动配置? > 自动加载 META-INF/spring.factories 配置类 ```text 1、@ConfigurationProperties("") 用于注册指定配置属性 2、@Import() 通过快速导入的方式实现把实例加入spring的IOC容器中 - 1)、直接填class数组方式 - 2)、ImportSelector方式 - 3)、ImportBeanDefinitionRegistrar方式 ``` - zuul 最高支持spring boot版本? ```text 由于最新的 spring-boot 2.5.5 版本,从 ErrorController 中删除了 getErrorPath() API, 但spring-cloud-starter-netflix-zuul 2.2.7.RELEASE 仍然调用此 API 并导致此错误, 对于zuul来说spring-boot最高版本为2.3.4.RELEASE ```