1. 自定义启动包
自动扫描加载装配类方式变了,不再是从spring.factories中
自定义启动器
@AutoConfiguration
2. mybatis-plus报错
1. Property 'sqlSessionFactory' or 'sqlSessionTemplate' are required
升级到最新版3.5.3.1
2. Invalid value type for attribute 'factoryBeanObjectType': java.lang.String
看官网,对应依赖换名称了
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>3.5.6</version>
</dependency>
dynamic-datasource-spring-boot3-starter
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot3-starter</artifactId>
<version>4.1.3</version>
</dependency>
3. eureka服务端访问不了控制台页面
版本问题
springboot3.0.4对应
spring-cloud-dependencies 2022.0.1
里面
使用cloud都加上spring-cloud-dependencies对应版本,使用的组件会自动匹配版本
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
4. eureka4.0版本客户端没有@EnableEurekaClient注解
springcloudalibaba版本
springcloudalibaba支持springboot3
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2022.0.0.0-RC1</version>
<scope>import</scope>
<type>pom</type>
</dependency>
5. sqlserver驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接
java.security模块问题
url末尾加上;encrypt=false
url: jdbc:sqlserver://localhost:1433;DatabaseName=WaiSongMeiKang;encrypt=false
6.新版springboot项目生成结构
默认生成spring-boot-starter包,没有Tomcat容器,执行完毕就关了
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
包含springboot项目核心包:Core starter, including auto-configuration support, logging and YAML等
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot</artifactId>
<version>3.0.6</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>3.0.6</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
<version>3.0.6</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>jakarta.annotation</groupId>
<artifactId>jakarta.annotation-api</artifactId>
<version>2.1.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>6.0.8</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.yaml</groupId>
<artifactId>snakeyaml</artifactId>
<version>1.33</version>
<scope>compile</scope>
</dependency>
</dependencies>
Spring Boot项目启动流程:
Spring Boot项目被打包成jar或war文件。
使用Java命令启动jar或war文件,会启动一个Java进程。
Java进程会读取jar或war文件中的配置文件,加载应用程序所需的类和资源。
Spring Boot应用程序会初始化各种Bean,启动各种服务。
Spring Boot应用程序会启动内嵌的Web服务器(如Tomcat、Jetty等)。
内嵌的Web服务器会监听HTTP请求,等待客户端的请求。
收到第一个请求的处理过程:
客户端发送HTTP请求到内嵌的Web服务器,请求到达Web服务器。
Web服务器将请求转发给Spring Boot应用程序的DispatcherServlet。
DispatcherServlet根据请求的URL匹配对应的Controller。
Controller调用对应的服务和Bean进行业务逻辑处理。
服务和Bean将处理结果返回给Controller。
Controller将处理结果返回给DispatcherServlet。
DispatcherServlet将处理结果封装成HTTP响应,返回给Web服务器。
Web服务器将HTTP响应返回给客户端。
部署运行情况:
Spring Boot应用程序可以打包成jar或war文件,可以通过Java命令或者Tomcat等Web服务器启动运行。
Spring Boot应用程序可以部署到云平台(如AWS、Azure等),也可以部署到Docker容器中进行运行。
Spring Boot应用程序可以使用Spring Cloud等微服务框架进行部署和运行,实现分布式架构和服务治理。
配置文件的端口号是谁的?
Spring Boot应用程序是一个Java进程,它本身没有端口号。但是,当你在应用程序中使用内嵌的Web服务器(如Tomcat、Jetty或Undertow)时,Web服务器会监听配置的端口,并提供HTTP服务。
那在springboot中,内嵌的Tomcat是在线程中运行的吗
在Spring Boot中,内嵌的Tomcat是在应用程序的主线程中运行的。
Spring Boot会在应用程序的主线程中启动Tomcat服务器,并在该线程中处理所有的HTTP请求和响应。这样可以简化应用程序的架构,并提高应用程序的性能,因为Tomcat服务器和应用程序共享同一个线程池。同时,这也意味着如果Tomcat服务器被阻塞或出现问题,整个应用程序可能会受到影响。
进程与线程
主线程和其他线程啥区别
主线程是指应用程序启动时默认创建的线程,它是应用程序的入口点,负责执行应用程序的主要逻辑。在Spring Boot中,主线程负责启动Tomcat服务器,并处理所有的HTTP请求和响应。主线程通常是应用程序的最后一个线程退出的线程,当主线程退出时,整个应用程序也会退出。
其他线程是指在应用程序运行过程中由主线程或其他线程创建的线程。这些线程可以执行其他任务,如处理用户请求、执行后台任务等。其他线程通常是由应用程序的业务逻辑触发的,它们可以在应用程序的不同阶段执行,生命周期不同。当其他线程执行完毕时,它们会退出,但不会影响主线程的运行。
总的来说,主线程是应用程序的入口点,其他线程是执行业务逻辑的工作线程,它们在应用程序的不同阶段执行,共同构成了应用程序的多线程模型。
主线程也就是应用程序的进程吗
不完全是。在Java中,进程和线程是两个不同的概念。进程是指正在运行的程序的实例,它拥有自己的内存空间、文件句柄、网络连接等系统资源。而线程是进程中的一个执行单元,它可以共享进程的内存空间和系统资源,但它拥有自己的执行堆栈和程序计数器。
在Spring Boot中,应用程序是一个Java进程,它包含了所有的线程和系统资源。主线程是应用程序启动时默认创建的线程,它负责执行应用程序的主要逻辑。其他线程是由主线程或其他线程创建的,它们可以执行其他任务,如处理用户请求、执行后台任务等。
因此,主线程是应用程序的一部分,而应用程序则是一个Java进程。虽然主线程和应用程序的进程有一定的关系,但它们并不是完全等同的概念。
主线程关闭,进程关闭吗
当主线程退出时,不一定意味着应用程序的进程会关闭。应用程序的进程只有在所有线程都退出时才会关闭。在Spring Boot中,如果主线程退出,但其他线程仍在执行任务,那么应用程序的进程仍然会继续运行,直到所有线程都退出为止。
当所有线程都退出时,应用程序的进程会自动关闭。在Java中,如果一个进程中没有活动的非守护线程,那么该进程就会退出。因此,在Spring Boot中,如果所有线程都是守护线程,那么应用程序的进程会在主线程退出时立即关闭。
总之,应用程序的进程和线程是两个不同的概念,主线程退出并不意味着应用程序的进程会关闭,只有所有线程都退出时,应用程序的进程才会关闭。