本篇文章为你整理了SpringBoot学习笔记(springboot 教程)的详细内容,包含有springboot系列教程 springboot 教程 springboot完整教程 springboot怎么学 SpringBoot学习笔记,希望能帮助你了解 SpringBoot学习笔记。
父包 spring-boot-starter-parent 的版本手动更改为了 2.6.3,jdk版本1.8 与 spring boot 3.0.0 版本不匹配,会报错
java.version 修改为了1.8
?xml version="1.0" encoding="UTF-8"?
project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"
modelVersion 4.0.0 /modelVersion
parent
groupId org.springframework.boot /groupId
artifactId spring-boot-starter-parent /artifactId
version 2.6.3 /version
relativePath/ !-- lookup parent from repository --
/parent
groupId priv.dandelion /groupId
artifactId springboot_01_quickstart /artifactId
version 0.0.1-SNAPSHOT /version
properties
java.version 1.8 /java.version
/properties
dependencies
dependency
groupId org.springframework.boot /groupId
artifactId spring-boot-starter-web /artifactId
/dependency
dependency
groupId org.springframework.boot /groupId
artifactId spring-boot-starter-test /artifactId
scope test /scope
/dependency
/dependencies
build
plugins
plugin
groupId org.springframework.boot /groupId
artifactId spring-boot-maven-plugin /artifactId
/plugin
/plugins
/build
/project
Spring 程序中的坐标需要自己编写,而且坐标非常多
SpringBoot 程序中的坐标是我们在创建工程时进行勾选自动生成的
Spring 程序需要自己编写这个配置类。这个配置类大家之前编写过,肯定感觉很复杂
SpringBoot 程序不需要我们自己书写
SpringBoot 程序服务器运行在本机
当进行前后端联调时,按理说前端需要连接后端开发的机器,比较麻烦
是否有更好的方式?
该 jar 包运行不依赖于 Tomcat 和 Idea也可以正常运行
这个 jar 包在运行过程中连接和我们自己程序相同的 Mysql 数据库即可
groupId org.springframework.boot /groupId
artifactId spring-boot-maven-plugin /artifactId
/plugin
如果配置文件中包含中文,最好在设置中设置编码为 UTF-8 并重新检查配置文件中的中文,避免出现乱码问题导致配置文件无法使用,具体操作如下
进入 jar 包所在目录,使用 cmd 输入命令
java -jar springboot_01_quickstart-0.0.1-SNAPSHOT.jar
自动配置。这个是用来解决 Spring 程序配置繁琐的问题
起步依赖。这个是用来解决 Spring 程序依赖设置繁琐的问题
辅助功能(内置服务器,...)。在启动 SpringBoot 程序时既没有使用本地的 tomcat 也没有使用 tomcat 插件,而是使用 SpringBoot 内置的服务器。
使用 Spring Initializr 方式创建的 Maven 工程的的 pom.xml 配置文件中自动生成了很多包含 starter 的依赖,这些以来就是启动依赖,如下
parent
groupId org.springframework.boot /groupId
artifactId spring-boot-starter-parent /artifactId
version 2.7.8 /version
/parent
!--
...
dependencies
dependency
groupId org.springframework.boot /groupId
artifactId spring-boot-starter-web /artifactId
/dependency
dependency
groupId org.springframework.boot /groupId
artifactId spring-boot-starter-test /artifactId
scope test /scope
/dependency
/dependencies
进入 spring-boot-starter-parent 的父工程 spring-boot-dependencies 中,其中包含:
properties... 标签中定义了各个技术软件依赖的版本,避免了我们在使用不同软件技术时考虑版本的兼容问题。在 properties 中可以找到各种技术的版本。
dependencyManagement... 标签是进行依赖版本锁定,但是并没有导入对应的依赖;如果我们工程需要那个依赖只需要引入依赖的 groupid 和 artifactId 不需要定义 version。
build... 标签中对插件的版本进行了锁定
groupId org.springframework.boot /groupId
artifactId spring-boot-starter-web /artifactId
/dependency
引入了 spring-web 和 spring-webmvc 的依赖,这就是为什么我们的工程中没有依赖这两个包还能正常使用 springMVC 中的注解的原因。
而依赖 spring-boot-starter-tomcat ,从名字基本能确认内部依赖了 tomcat,所以我们的工程才能正常启动。
groupId org.springframework.boot /groupId
artifactId spring-boot-starter /artifactId
version 2.7.8 /version
scope compile /scope
/dependency
dependency
groupId org.springframework.boot /groupId
artifactId spring-boot-starter-json /artifactId
version 2.7.8 /version
scope compile /scope
/dependency
dependency
groupId org.springframework.boot /groupId
artifactId spring-boot-starter-tomcat /artifactId
version 2.7.8 /version
scope compile /scope
/dependency
dependency
groupId org.springframework /groupId
artifactId spring-web /artifactId
version 5.3.25 /version
scope compile /scope
/dependency
dependency
groupId org.springframework /groupId
artifactId spring-webmvc /artifactId
version 5.3.25 /version
scope compile /scope
/dependency
/dependencies
所有 SpringBoot 项目要继承的项目,定义了若干个坐标版本号(依赖管理,而非依赖),以达到减少依赖冲突的目的
public static void main(String[] args) {
SpringApplication.run(Springboot01QuickstartApplication.class, args);
SpringBoot 在创建项目时,采用 jar 的打包方式
SpringBoot 的引导类是项目的入口,运行 main 方法就可以启动项目
因为 pom.xml 中配置了 spring-boot-starter-web 依赖,而该依赖中依赖 tomcat ,所以运行 main 方法就可以使用 tomcat 启动工程。
groupId org.springframework.boot /groupId
artifactId spring-boot-starter-web /artifactId
exclusions
exclusion
artifactId spring-boot-starter-tomcat /artifactId
groupId org.springframework.boot /groupId
/exclusion
/exclusions
/dependency
dependency
groupId org.springframework.boot /groupId
artifactId spring-boot-starter-jetty /artifactId
/dependency
当三种配置文件均存在时,优先级application.properties application.yml application.yaml
SpringBoot 程序的配置文件名必须是 application ,只是后缀名不同
使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键),空格的个数并不重要,只要保证同层级的左侧对齐即可。
直接使用 @Value("${ }") 注解进行注入,用于读取单个数据,参数为${ }包裹的数据名称的字符串
用于获取全部数据,使用时对Environment类型的属性进行自动装配,使用其getProperty()方法来获取数据
System.out.println(environment.getProperty("lesson"));
System.out.println(environment.getProperty("server.port"));
System.out.println(environment.getProperty("enterprise.age"));
System.out.println(environment.getProperty("enterprise.subject[1]"));
return "hello boot!";
该方式用于读取任意数据,将其封装为实体类,使用注解绑定获取数据的范围,在获取时,通过自动注入获取该实体类对象并进行操作
后续要使用自动装配,故要添加 @Component 注解,将这个类交给 Spring 管理
使用@ConfigurationProperties(prefix = "enterprise")注解,prefix 属性值表示读取配置文件的哪一部分数据,此处代表读取 enterprise中的数据
简单书写部分中,设定环境的名称的spring.profiles的书写格式并不规范,规范的书写格式如下
#开发环境
spring:
config:
activate:
on-profile: dev
server:
port: 80
与 yaml 文件不同,properties 的多环境配置写在不同的文件中,并在主配置文件中指定使用的环境
多个环境使用文件名进行区分和定义,application-环境名.properties
公用的配置可以写application.properties中
可以在启动指令后添加参数来临时覆盖配置文件中的内容,参数可以有多个,每一个参数的格式为-- 空格 使用.连接的配置属性名称=属性值,如下
java -jar springboot_01_quickstart-0.0.1-SNAPSHOT.jar -- spring.profiles.active=test -- server.port=88
由于测试环境和开发环境的很多配置都不相同,所以测试人员在运行我们的工程时需要临时修改很多配置,可能参数过多,过于复杂
classpath 指的是项目的 resources 目录下,file 指的是打好的 jar 包所在的目录下
file 中的配置文件一般用于系统打包后临时设置通用属性,classpath 中的配置文件一般用于开发阶段设置通用属性
file 中的配置文件的优先级高于 classpath 中的配置文件
同一分类的配置中,config 文件夹中的配置文件的优先级高于 config文件夹外的配置文件
如果测试类和引导类的包名不一致,需要为@SpringBootTest 的 class 属性手动指定引导类的字节码对象,如@SpringBootTest(classes = Springboot02TestApplication.class)
@SpringBootTest
class Springboot02TestApplicationTests {
@Autowired
private BookService bookService;
@Test
void contextLoads() {
bookService.save();
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type priv.dandelion.dao.BookDao available: expected at least 1 bean which qualifies as autowire candidate. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoMatchingBeanFound(DefaultListableBeanFactory.java:1801) ~[spring-beans-5.3.25.jar:5.3.25]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1357) ~[spring-beans-5.3.25.jar:5.3.25]
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311) ~[spring-beans-5.3.25.jar:5.3.25]
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.resolveFieldValue(AutowiredAnnotationBeanPostProcessor.java:657) ~[spring-beans-5.3.25.jar:5.3.25]
... 74 common frames omitted
Mybatis 会扫描接口并创建接口的代码对象交给 Spring 管理,但是现在并没有告诉 Mybatis 哪个是 dao 接口
注意:Mysql驱动版本大于8.0时,需要在url连接串中配置时区 jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC,或在MySQL数据库端配置时区解决此问题
@Insert("insert into tbl_book values(null,#{type},#{name},#{description})")
// @Insert("insert into tbl_book (type,name,description) values(#{type},#{name},#{description})")
public int save(Book book);
@Update("update tbl_book set type = #{type}, name = #{name}, description = #{description} where id = #{id}")
public int update(Book book);
@Delete("delete from tbl_book where id = #{id}")
public int delete(Integer id);
@Select("select * from tbl_book where id = #{id}")
public Book getById(Integer id);
@Select("select * from tbl_book")
public List Book getAll();
测试类,使用了 @SpringBootTest 注解,更换了使用的包
// import org.junit.Test;
import org.junit.jupiter.api.Test;
// import ...
//@RunWith(SpringJUnit4ClassRunner.class)
//@ContextConfiguration(classes = SpringConfig.class)
// TODO 将原先使用的注解更改为 @SpringBootTest
@SpringBootTest
public class BookServiceTest {
@Autowired
private BookService bookService;
// TODO 原先使用的 @Test 注解 现在需要重新导包
@Test
public void testGetById() {
Book byId = bookService.getById(1);
System.out.println(byId);
@Test
public void testGetAll() {
List Book all = bookService.getAll();
System.out.println(all);
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ssm_db
username: root
password: 123456
5.4 静态资源
5.5 包结构展示
5.6 其他问题
若再未加入前端代码时启动过服务器,加入前端代码后无法正常访问到页面时
执行 Maven 的 clean 指令,再重新启动服务器(重新打包)即可
SpringBoot 版本问题、MySQL时区问题、项目无法构建、配置文件打包乱码等问题,本节笔记中均有提及,可向上查阅
以上就是SpringBoot学习笔记(springboot 教程)的详细内容,想要了解更多 SpringBoot学习笔记的内容,请持续关注盛行IT软件开发工作室。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。