zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Centos下一个server安装的版本号mysql
    android 玩愤怒的小鸟等游戏的时候全屏TP失败
    6.8 一般处理语言
    [AC自己主动机+可能性dp] hdu 3689 Infinite monkey theorem
    POJ1185:火炮(减少国家)
    教你如何下载音乐的网站只试镜
    实现js呼叫流行
    [Angular 2] Async Http
    [Typescript] Function defination
    [React] React Router: setRouteWillLeaveHook
  • 原文地址:https://www.cnblogs.com/elian91/p/15793499.html
Copyright © 2011-2022 走看看