伙计,来跟我一块儿学SpringBoot! 【第二弹】

你们好,我是小菜,一个渴望在互联网行业作到蔡不菜的小菜。可柔可刚,点赞则柔,白嫖则刚!
死鬼~看完记得给我来个三连哦!java

本文主要介绍 SprinBoot
若有须要,能够参考
若有帮助,不忘 点赞mysql

1、 配置嵌入式Servlet容器

1)定制和修改Servlet容器的相关配置

法1:修改和server有关的配置web

properties server.tomcat.uri-encoding=UTF-8 //通用的Servlet容器设置 server.xxx //Tomcat的设置 server.tomcat.xxx spring

法2:编写一个EmbeddedServletContainerCustomizer:嵌入式的Servlet容器的定制器;来修改Servlet容器的配置
sql

2)注册Servlet三大组件

  • Servlet
  • Filter
  • Listener

因为 SpringBoot 默认是以jar包的方式启动嵌入式的Servlet容器来启动SpringBoot的web应用,因此没有web.xml文件数据库

注册三大组件用如下方式apache

ServletRegistrationBean
tomcat


FilterRegistrationBean

ServletListenerRegistrationBean

3)替换为其余嵌入式Servlet容器

默认支持如下容器springboot

  • Tomcat
<!-- 引入web模块默认就是使用嵌入式的Tomcat做为Servlet容器 -->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>
复制代码
  • Jetty
<!-- 先排除内置默认容器 -->
<dependency>
   <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>

<!--引入其余的Servlet容器-->
<dependency>
   <artifactId>spring-boot-starter-jetty</artifactId>
   <groupId>org.springframework.boot</groupId>
</dependency>
复制代码
  • Undertow
<!-- 先排除内置默认容器 -->
<dependency>
   <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>

<!--引入其余的Servlet容器-->
<dependency>
   <artifactId>spring-boot-starter-undertow</artifactId>
   <groupId>org.springframework.boot</groupId>
</dependency>
复制代码

4)嵌入式Servlet容器自动配置原理

EmbeddedServletContainerAutoConfiguration
服务器

  • EmbeddedServletContainerFactory(嵌入式Servlet容器工厂)

    public interface EmbeddedServletContainerFactory {
     //获取嵌入式的Servlet容器
     EmbeddedServletContainer getEmbeddedServletContainer(
           ServletContextInitializer... initializers)
    ;
      }
    }
    复制代码

  • EmbeddedServletContainer:(嵌入式的Servlet容器)

  • TomcatEmbeddedServletContainerFactory为例

  • 嵌入式容器的配置修改怎么生效

  • 方法1ServerProperties

  • 方法2EmbeddedServletContainerCustomizer(定制器帮咱们修改了Servlet容器的配置)

修改原理

容器中导入了EmbeddedServletContainerCustomizerBeanPostProcessor

ServerProperties:也是定制器

  • SpringBoot根据导入的依赖状况,给容器中添加相应的EmbeddedServletContainerFactory【TomcatEmbeddedServletContainerFactory】
  • 容器中某个组件要建立对象就会惊动后置处理器:EmbeddedServletContainerCustomizerBeanPostProcessor(只要是嵌入式的Servlet容器工厂,后置处理器就工做)
  • 后置处理器,从容器中获取全部的EmbeddedServletContainerCustomizer,调用定制器的定制方法

5)使用外置的Servlet容器

嵌入式Servlet容器:应用打成可执行的jar
优势: 简单、便携
缺点:默认不支持JSP、优化定制比较复杂

步骤

  1. 建立一个war项目

  2. 将嵌入式的Tomcat指定为provided

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-tomcat</artifactId>
      <scope>provided</scope>
    </dependency>
    复制代码
  3. 编写一个SpringBootServletInitializer的子类,并调用configure()方法

    public class ServletInitializer extends SpringBootServletInitializer {
       @Override
       protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
           //传入SpringBoot应用的主程序
          return application.sources(SpringBoot04WebJspApplication.class);
       }
    }
    复制代码
  4. 启动服务器就可使用

原理

jar包:执行SpringBoot主类的main方法,启动 Ioc容器,建立嵌入式的Servlet容器

war包:启动服务器,服务器启动SpringBoot应用SpringBootServletInitializer,启动 Ioc容器

2、数据访问

对于数据访问层,不管是SQL仍是NOSQLSpring Boot默认采用整合Spring Data的方式进行统一处理,添加大量自动配置,屏蔽了不少设置。引入各类xxxTemplatexxxRepository来简化咱们对数据访问层的操做。对咱们来讲只须要进行简单的设置便可。

1)整合基本JDBC与数据源

  • 引入starter :spring-boot-starter-jdbc
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>
复制代码
  • 配置application.yml
spring:
  datasource:
    username: root
    password: 123456
    url: jdbc:mysql://192.168.15.22:3306/test
    driver-class-name: com.mysql.jdbc.Driver
复制代码

结论

  • 默认使用org.apache.tomcat.jdbc.pool.DataSource做为数据源
  • 数据源的相关配置都在DataSourceProperties里面

自动配置原理

  1. 参考DataSourceConfiguration,根据配置建立数据源,默认使用Tomcat链接池。可使用spring.datasource.type指定自定义的数据源类型

  2. SpringBoot默承认以支持:

  • org.apache.tomcat.jdbc.pool.DataSource
  • HikariDataSource
  • BasicDataSource
  1. 自定义数据源类型

    @ConditionalOnMissingBean(DataSource.class)
    @ConditionalOnProperty(name = "spring.datasource.type")
    static class Generic {
      @Bean
      public DataSource dataSource(DataSourceProperties properties) {
          //使用DataSourceBuilder建立数据源,利用反射建立响应type的数据源,而且绑定相关属性
         return properties.initializeDataSourceBuilder().build();
      }
    }
    复制代码
  2. DataSourceInitializer:ApplicationListener

    做用

  3. runSchemaScripts():运行建表语句

  4. runDataScripts():运行插入数据的sql语句

    默认只须要将文件命名为

    schema-*.sqldata-*.sql

  5. 操做数据库:自动配置了JdbcTemplate操做数据库

2)整合Druid数据源

  • 引入druid数据源
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.8</version>
</dependency>
复制代码
  • 配置文件
  • 配置数据源

3)整合MyBatis

  • 引入依赖:
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.3.1</version>
</dependency>
复制代码

步骤
1)配置数据源相关属性
2)给数据库建表
3)建立JavaBean
4)注解使用


自定义MyBatis的配置规则

  • 在容器中添加一个ConfigurationCustomizer

  • 在启动类中添加MapperScan注解批量扫描全部的Mapper接口

5)配置文件使用

mybatis:
  #指定全局配置文件的位置
  config-location: classpath:mybatis/mybatis-config.xml
  #指定sql映射文件的位置
  mapper-locations: classpath:mybatis/mapper/*.xml 
复制代码

4)整合SpringData JPA

SpringData简介

Spring Data是一个用于简化数据库访问,并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷。
它能够极大的简化JPA的写法,能够在几乎不用写实现的状况下,实现对数据的访问和操做。除了CRUD外,还包括如分页、排序等一些经常使用的功能。


SpringData整合

  • 编写一个实体类(bean)和数据表进行映射,而且配置好映射关系
  • 编写一个Dao接口来操做实体类对应的数据表(Repository)
  • 配置JpaProperties
spring:  
 jpa:
    hibernate:
      #更新或者建立数据表结构
      ddl-auto: update
      #控制台显示SQL
         show-sql: true
复制代码

5)事件监听机制

如下文件是配置在META-INF/spring.factories

  • ApplicationContextInitializer
  • SpringApplicationRunListener

以上两个须要配置在(META-INF/spring.factories

org.springframework.context.ApplicationContextInitializer=\
com.atguigu.springboot.listener.HelloApplicationContextInitializer

org.springframework.boot.SpringApplicationRunListener=\
com.atguigu.springboot.listener.HelloSpringApplicationRunListener
复制代码

如下两个只须要放在ioc容器中

  • ApplicationRunner
  • CommandLineRunner
看完不赞,都是坏蛋
看完不赞,都是坏蛋

今天的你多努力一点,明天的你就能少说一句求人的话!

我是小菜,一个和你一块儿学习的男人。 💋

相关文章
相关标签/搜索