SpringBoot基础篇

1. IDEA创建

②标记的步骤可以基于spring官网创建,也可以基于阿里巴巴(https://start.aliyun.com/)创建

注意:第二个界面需要联网才可以

 

 2. 启动方式

1 @SpringBootApplication
2 public class Springboot01QuickstartApplication {
3     public static void main(String[] args) {
4         SpringApplication.run(Springboot01QuickstartApplication.class, args);
5     }
6 }

SpringBoot的引导类是Boot工程的执行入口,运行main方法就可以启动项目

SpringBoot工程运行后初始化Spring容器,扫描引导类所在包加载bean

注意:SpringBoot启动类必须在其他包(controller、service...)这些包之外。否则扫描不到其他类。

3. 内置服务器

tomcat(默认):apache出品,粉丝多,应用面广,负载了若干较重的组件
jetty:更轻量级,负载性能远不及tomcat
undertow:undertow,负载性能勉强跑赢tomcat

总结:

  • 内嵌Tomcat服务器是SpringBoot辅助功能之一。
  • 内嵌Tomcat工作原理是将Tomcat服务器作为对象运行,并将该对象交给Spring容器管理。
  • 变更内嵌服务器思想是去除现有服务器,添加全新的服务器。

4. 复制工程(项目)

原则:

保留工程基础结构

抹掉原始工程痕迹

方法:

  1. 在工作空间中复制对应工程,并修改工程名称
  2. 删除与Idea相关配置文件,仅保留src目录与pom.xml文件
  3. 修改pom.xml文件中的artifactId与新工程/模块名相同
  4. 删除name标签(可选)
  5. 保留备份工程供后期使用

5. 属性配置

文件:application.properties

修改端口:server.port=80

关闭运行日志图标(banner):spring.main.banner-mode=off

设置日志相关:logging.level.root=debug

SpringBoot内置属性查询:https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#application-properties

官方文档中参考文档第一项:Application Properties

6. SpringBoot的多种属性配置

application.properties(传统格式/默认格式)

1 server.port=80

application.yml(主流格式)

1 server:
2   port: 81

application.yaml

1 server:
2     port: 82

这三种配置格式可以共存,加载顺序(优先级)为:

application.properties > application.yml > application.yaml

特点:不同配置文件中相同配置按照加载优先级相互覆盖,不同配置文件中不同配置全部保留

7. yaml语法规则

  • 大小写敏感
  • 属性层级关系使用多行描述,每行结尾使用冒号结束
  • 使用缩进表示层级关系,同层级左侧对齐,只允许使用空格(不允许使用Tab键)
  • 属性值前面添加空格(属性名与属性值之间使用冒号+空格作为分隔)
  • # 表示注释
  • 核心规则:数据前面要加空格与冒号隔开
  • 字面值表示方式
1 boolean: TRUE #TRUE,true,True,FALSE,false , False 均可
2 float: 3.14 #6.8523015e+5 # 支持科学计数法
3 int: 123 #0b1010_0111_0100_1010_1110 # 支持二进制、八进制、十六进制
4 null: ~ # 使用 ~ 表示 null
5 string: HelloWorld # 字符串可以直接书写
6 string2: "Hello World" # 可以使用双引号包裹特殊字符
7 date: 2018-02-17 # 日期必须使用 yyyy-MM-dd 格式
8 datetime: 2018-02-17T15:02:31+08:00 # 时间和日期之间使用 T 连接,最后使用 + 代表时区
  • 数组表示方式

在属性名书写位置的下方使用减号作为数据开始符号,每行书写一个数据,减号与数据间空格分隔

 1 subject:
 2 - Java
 3 - 前端
 4 - 大数据
 5 enterprise:
 6 name: itcast
 7 age: 16
 8 subject:
 9 - Java
10 - 前端
11 - 大数据
12 likes: [王者荣耀,刺激战场] # 数组书写缩略格式
 1 users: # 对象数组格式
 2 - name: Tom
 3 age: 4
 4 - name: Jerry
 5 age: 5
 6 users: # 对象数组格式二
 7 -
 8 name: Tom
 9 age: 4
10 -
11 name: Jerry
12 age: 5 # 对象数组缩略格式
13 users2: [ { name:Tom , age:4 } , { name:Jerry , age:5 } ]

8. yaml数据读取

①读取单个数据

使用@Value读取单个数据,属性名引用方式:${一级属性名.二级属性名……}

在配置文件中可以使用属性名引用方式引用属性

属性值中如果出现转义字符,需要使用双引号包裹

②读取多个数据

读取单一数据可以解决读取数据的问题,但是如果定义的数据量过大,这么一个一个书写肯定会累死人的,SpringBoot提供了一个对象,能够把所有的数据都封装到这一个对象中,这个对象叫做Environment,使用自动装配注解可以将所有的yaml数据封装到这个对象中。

③读取对象数据

单一数据读取书写比较繁琐,全数据封装又封装的太厉害了,每次拿数据还要一个一个的getProperties(),总之用起来都不是很舒服。由于Java是一个面向对象的语言,很多情况下,我们会将一组数据封装成一个对象。SpringBoot也提供了可以将一组yaml对象数据封装一个Java对象的操作。

首先定义一个对象,并将该对象纳入Spring管控的范围,也就是定义成一个bean,然后使用注解@ConfigurationProperties指定该对象加载哪一组yaml中配置的信息。

注意:在 yml自定义数据是没有代码提示的

9. SpringBoot整合JUnit

不使用SpringBoot时,整合JUnit方式:

 1 //加载spring整合junit专用的类运行器
 2 @RunWith(SpringJUnit4ClassRunner.class)
 3 //指定对应的配置信息
 4 @ContextConfiguration(classes = SpringConfig.class)
 5 public class AccountServiceTestCase {
 6     //注入你要测试的对象
 7     @Autowired
 8     private AccountService accountService;
 9     @Test
10     public void testGetById(){
11         //执行要测试的对象对应的方法
12         System.out.println(accountService.findById(2));
13     }
14 }

其中核心代码是前两个注解,第一个注解@RunWith是设置Spring专用于测试的类运行器,简单说就是Spring程序执行程序有自己的一套独立的运行程序的方式,不能使用JUnit提供的类运行方式了,必须指定一下,但是格式是固定的,琢磨一下,每次都指定一样的东西,这个东西写起来没有技术含量啊,第二个注解@ContextConfiguration是用来设置Spring核心配置文件或配置类的,简单说就是加载Spring的环境你要告诉Spring具体的环境配置是在哪里写的,虽然每次加载的文件都有可能不同,但是仔细想想,如果文件名是固定的,这个貌似也是一个固定格式。似然有可能是固定格式,那就有可能每次都写一样的东西,也是一个没有技术含量的内容书写

SpringBoot方式:

 1 @SpringBootTest
 2 class Springboot04JunitApplicationTests {
 3     //注入你要测试的对象
 4     @Autowired
 5     private BookDao bookDao;
 6     @Test
 7     void contextLoads() {
 8         //执行要测试的对象对应的方法
 9         bookDao.save();
10         System.out.println("two...");
11     }
12 }

看看这次简化成什么样了,一个注解就搞定了,而且还没有参数,再体会SpringBoot整合其他技术的优势在哪里,就两个字——简化。使用一个注解@SpringBootTest替换了前面两个注解。至于内部是怎么回事?和之前一样,只不过都走默认值。

这个时候有人就问了,你加载的配置类或者配置文件是哪一个?就是我们前面启动程序使用的引导类。如果想手工指定引导类有两种方式:

第一种方式使用属性的形式进行,在注解@SpringBootTest中添加classes属性指定配置类

 1 @SpringBootTest(classes = Springboot04JunitApplication.class)
 2 class Springboot04JunitApplicationTests {
 3     //注入你要测试的对象
 4     @Autowired
 5     private BookDao bookDao;
 6     @Test
 7     void contextLoads() {
 8         //执行要测试的对象对应的方法
 9         bookDao.save();
10         System.out.println("two...");
11     }
12 }

第二种方式回归原始配置方式,仍然使用@ContextConfiguration注解进行,效果是一样的

 1 @SpringBootTest
 2 @ContextConfiguration(classes = Springboot04JunitApplication.class)
 3 class Springboot04JunitApplicationTests {
 4     //注入你要测试的对象
 5     @Autowired
 6     private BookDao bookDao;
 7     @Test
 8     void contextLoads() {
 9         //执行要测试的对象对应的方法
10         bookDao.save();
11         System.out.println("two...");
12     }
13 }

总结:

  1. 导入测试对应的starter

  2. 测试类使用@SpringBootTest修饰

  3. 使用自动装配的形式添加要测试的对象

  4. 测试类如果存在于引导类所在包或子包中无需指定引导类

  5. 测试类如果不存在于引导类所在的包或子包中需要通过classes属性指定引导类

10. SpringBoot整合Mybatis

①导入依赖

手动导入:

 1 <dependencies>
 2     <!--1.导入对应的starter-->
 3     <dependency>
 4         <groupId>org.mybatis.spring.boot</groupId>
 5         <artifactId>mybatis-spring-boot-starter</artifactId>
 6         <version>2.2.0</version>
 7     </dependency>
 8 
 9     <dependency>
10         <groupId>mysql</groupId>
11         <artifactId>mysql-connector-java</artifactId>
12         <scope>runtime</scope>
13     </dependency>
14 </dependencies>

创建项目时导入:

②配置数据源信息

1 #2.配置相关信息
2 spring:
3   datasource:
4     driver-class-name: com.mysql.cj.jdbc.Driver
5     url: jdbc:mysql://localhost:3306/ssm_db
6     username: root
7     password: root

配置到这里就结束了。只需要对应的实体类和DAO(Mapper)就可以了。

11. SpringBoot整合Mybatis-Plus

①导入依赖

1 <dependency>
2     <groupId>com.baomidou</groupId>
3     <artifactId>mybatis-plus-boot-starter</artifactId>
4     <version>3.4.3</version>
5 </dependency>

关于这个坐标,此处要说明一点,之前我们看的starter都是spring-boot-starter-???,也就是说都是下面的格式

1 Spring-boot-start-***

而这个坐标的名字书写比较特殊,是第三方技术名称在前,boot和starter在后

②配置数据源信息

1 #2.配置相关信息
2 spring:
3   datasource:
4     driver-class-name: com.mysql.cj.jdbc.Driver
5     url: jdbc:mysql://localhost:3306/ssm_db
6     username: root
7     password: root

剩下的就是编写DAO(Mapper)

12. SpringBoot整合Druid

首先在yml配置文件配置数据源信息。

在没有配置Druid的时候,SpringBoot会默认配置一个数据源对象--HiKari,通过启动日志可以看到。

1 2021-11-29 09:39:15.202  INFO 12260 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2 2021-11-29 09:39:15.208  WARN 12260 --- [           main] com.zaxxer.hikari.util.DriverDataSource  : Registered driver with driverClassName=com.mysql.jdbc.Driver was not found, trying direct instantiation.
3 2021-11-29 09:39:15.551  INFO 12260 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Start completed.

配置Druid只要两步:

①导入依赖

1 <dependencies>
2     <dependency>
3         <groupId>com.alibaba</groupId>
4         <artifactId>druid</artifactId>
5         <version>1.1.16</version>
6     </dependency>
7 </dependencies>

②修改配置

1 spring:
2   datasource:
3     driver-class-name: com.mysql.cj.jdbc.Driver
4     url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
5     username: root
6     password: root
7     type: com.alibaba.druid.pool.DruidDataSource

问题:目前的数据源配置格式是一个通用格式,不管你换什么数据源都可以用这种形式进行配置。但是新的问题又来了,如果对数据源进行个性化的配置,例如配置数据源对应的连接数量,这个时候就有新的问题了。每个数据源技术对应的配置名称都一样吗?肯定不是啊,各个厂商不可能提前商量好都写一样的名字啊,怎么办?就要使用专用的配置格式了。

①导入对应的starter

1 <dependencies>
2     <dependency>
3         <groupId>com.alibaba</groupId>
4         <artifactId>druid-spring-boot-starter</artifactId>
5         <version>1.2.6</version>
6     </dependency>
7 </dependencies>

②修改配置

1 spring:
2   datasource:
3     druid:
4       driver-class-name: com.mysql.cj.jdbc.Driver
5       url: jdbc:mysql://localhost:3306/ssm_db?serverTimezone=UTC
6       username: root
7       password: root
原文地址:https://www.cnblogs.com/elian91/p/15793499.html