SpringBoot

Springboot概括

20191112

16:42

    1. 介绍

Springboot是一个基于spring框架的工具框架,可以实现spring容器的快速搭建,快速配置,快速启动

    1. 特性

独立运行的Spring容器

可以实现通过main方法作为工程的一个cpu运行入口

启动一个spring容器,容器中的各种bean创建完成

 

内嵌servlet容器

没有web应用servlet容器也依然存在,默认是tomcat(1.5.9.RELEASEspringboot内嵌tomcat8.5),整合SpringMVC非常简单,将SpringMVC依赖引入就会根据自动配置检测当前工程是否是一个web应用而启动tomcat容器

 

简化依赖:

利用项目管理工具maven实现了简化依赖的入口,将不同的功能的依赖区分对待,如开发Springmvc+Spring的web应用框架,只需要依赖一个springboot提供的starter-web

 

自动配置

Springboot已经在扩展时准备了绝大部分的开发场景可以用到的不同技术的配置内容(工程的"0"xml配置),使用springboot就很少可能会自定义xml文件

springboot会根据你的依赖内容,决定是否创建对应技术的各种bean对象

如: 只依赖starter-web的时候,springboot不会创建datasource,一旦你依赖了starter-jdbc时,确定当前的功能要使用持久层数据源,自动配置datasource(bean标签 datasource druid,即阿里巴巴数据源)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

springboot手动搭建

2019916

9:52

1.步骤

1.1创建maven工程quickstart

1.2pom文件修改

继承springboot-parent

<parent>

          <!-- groupId artifactId version -->

          <groupId>org.springframework.boot</groupId>

          <artifactId>spring-boot-starter-parent</artifactId>

          <version>1.5.9.RELEASE</version>

</parent>

 

starter-web开发一个web应用(没有持久层)

<dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-web</artifactId>

</dependency>

 

1.3启动类

核心注解@SpringBootApplication

package cn.tedu;

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

/**

 * springboot核心注解

 * 启动一个spring的运行容器

 * @author tedu

 */

@SpringBootApplication

public class StarterDemo01 {

/*

 * 启动方法main

 */

public static void main(String[] args) {

/*source: Class 表示当前启动类的反射对象

 */

SpringApplication.

run(StarterDemo01.class, args);

}}

1.4 controller-serverhello world

测试当前系统是否具备开发spring 和sprigmvc框架代码的能力

HelloController 注入Service

RequestMapping("hello")

 

测试代码见源码笔记

 

 

springboot的全局配置文件

20191112

19:15

全局配置文件主要是定义一些属性参数,如何实现springboot的加载,例如tomcat 8080,可以通过配置文件修改指定的tomcat的启动端口

1.application.properties

springboot提供一个key=value结构的属性数据输入,springboot提供了一个全局配置文件application.properties,只需要放到classpath就可以在启动时被加载(application固定.必须是这个)

1.1修改tomcat的访问端口访问路径

默认情况下,访问tomcat8080,访问contextPath /

#8091

server.port=8091

server.contextPath=/1906

通过全局配置文件可以定义springboot在自动配置是使用的一些属性值,datasource可以在application.properties定义url,driver,name,password

1.2 yml格式的文件

企业常用的是yml格式配置文件,spring也支持对yml格式的解析(了解什么是yml,了解properties和yml的关系,了解企业常用的yml结构)application.yml

 

yml格式是面向数据结构的(层级结构)配置文件格式

properties

server.port=8090

server.contextPath=/1906

 

yml

server

 port: 8090

 contextPath: /1906

第一级名称:

[空格]第二级:[空格]值

[空格][空格]第三级:[空格]值

 

例:

properties

a.b.c.d=haha

a.b.c.e=kaka

a.b.f=wawa

 

yml(neon , mars2支持yml格式解析)

a:

[]b:

[][]c:

[][][]d:[]haha

[][][]e:[]kaka

[][]f:[]wawa

即:

a:

 b:

  c:

   d: haha

   e: kaka

  f:wawa

 

Springboot自动配置原理

20191112

19:39

1.spring加载xml

1.1早期的xml

大量的bean标签

1.2java5出现了注解结束

整合了大量的关键字的配置内容,扫描@Controller,@service,@Component等等,DOM/SAX-->javaConfig-->配合大量注解实现了大量的bean标签转化配置 --> springboot实现了更多的注解使用代替了xml

1.3包扫描/bean的创建

xml文件利用注解@Configuration使用代码配置(@Configuration所在的类表示一个xml配置文件

@Configuration

public class HelloConfig{

 

}

@Bean创建对象(相当于bean标签)

<bean id="init" class="com.alibab.component.HelloComponent" />

@Configuration

public class Hello{

//@Bean注解生成个初始化方法,返回一个bean对象

@Bean

public HelloComponent initH(){

return new HelloComponent();

}

 

}

1.4Springboot核心注解

@SpringBootApplication是一个组合注解,组合三个重要的注解

@SpringBootConfiguration

@ComponentScan

@EnableAutoConfiguration

 

SpringBootConfiguration注解==Configuration: 启动类本身就是一个配置类,表示启动类加载spring的基本xml文件

ComponentScan注解==<context:Component-scan/> : 默认会对当前类的包进行加载,相当于包扫描的basePackage<context:component-scan basePackage="cn.tedu" />

上述描述的是自动扫描的逻辑

1.5根据依赖的内容实现自动加载bean对象

@configuration表示一个类是个配置类相当于xml配置文件

@bean表示方法返回值需要spring管理其IOC DI

@Condition衍生注解(根据依赖做条件的核心内容)

可以使用条件注解判断当前配置类是否生效加载

@ConditionOnClass: 环境中存在指定类满足条件,反之不满足

@ConditionOnMissingClass: 环境中不存在指定的类满足条件,反之不满足

@ConditionOnBean: 环境中存在指定的bean对象,满足条件,反之不满足

@ConditionOnMissingBean: 不存在指定bean满足条件

@ConditionOnProperties: 当前系统是wen应用满足条件

….

条件注解在使用配置类(Configuration配合使用)通过对条件的设定,判断当前类局部或者全部都需要加载

可以通过如下配置对配置内容是否加载进行设置

package cn.tedu.condition.config;

 

import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;

import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

 

import cn.tedu.condition.ConditionA;

import cn.tedu.condition.bean.ConditionBeanA;

import cn.tedu.controller.HelloController;

 

@Configuration

@ConditionalOnClass({ConditionA.class})

public class ConditionConfig {

@Bean

//当前环境必须具备某些bean丢向才会加载这个方法

@ConditionalOnBean(HelloController.class)

public ConditionBeanA initCBA(){

return new ConditionBeanA();

}}

1.6Springboot的整合自动配置

@EnableAutoConfiguration

根据依赖的jar包Spring-boot-autoconfigure.jar,**-autoconfigur.jar提供的配置文件spring.factories记录了当前扩展包中提供的所有实现过的不同结束的配置类的加载配置类的全路径名称

自动配置类中,一般可以翻到各种**Properties类中以@ConfigurationProperties(prefix="spring.mvc")

一旦属性类***properties会根据这个注解实现读取properties文件中spring.mvc为前缀的内容

 

注意事项:

  1. 前缀满足条件1906

1906.*支持驼峰命名

  1. 属性就是除了前缀的名称  1906.className 属性中必须有className
  2. 支持多级读取

ConfigurationProperties(prefix=1906)

1906.a.className

@ConfigurationProperties(prefix = "spring.mvc")

public class WebMvcProperties {

private final View view = new View();}

 

view这个属性本身也是一个对象类

public static class View {

private String prefix;

private String suffix;

 

多级配置支持spring.mvc(prefix前缀)

spring.mvc.view.prefix

private String prefix;

spring.mvc.view.suffix

private String suffix;

 

@Value("${spring.mvc.view.prefix}")

spring.factories文件定义的类的全路径名称,在使用@EnableAutoConfiguration注解后,会将所有的全路径名称加载到内存中,最终根据条件决定哪些加载哪些不加载

2.总结:

2.1 spring的支持才能实现springboot完善

引入了xml转向注解的技术

2.2 自动扫描

@ComponentScan自动实现了component-scan标签的扫描,默认范围就是启动类的包,

2.3 根据依赖实现自动配置

条件注解Condition根据不同场景不同情况定义配置类是否被加载

2.4 扩展的内容

configuration注解: 相当于定义了一个类与xml对应关系

Bean注解: 相当于定义了一个方法的返回值与bean标签的关系

ConfigurationProperties: 定义了properties文件中读取的属性,可以使用前缀读取与类属性相同名称的值,支持多级读取

2.5 核心注解

@SpringBootApplication  组合以下注解:

@SpringBootConfiguration: 标识一个配置类

@ComponentScan: 定义了Spring扫描包的范围

@EnableAutoConfiguration: 扩展的自动配置类得以被加载实现逻辑

 

Springboot和持久层整合

20191113

14:08

1.整合步骤

1.1依赖内容

Springboot-jdbc定义所有接口规范

mysql定义连接的后端数据库类型

mybatis的springboot引入

 

DruidDatasource : 默认springboot使用的底层连接池Tomcat JDBC datasource

<!-- springboot jdbc -->

    <dependency>

            <groupId>org.springframework.boot</groupId>

            <artifactId>spring-boot-starter-jdbc</artifactId>

    </dependency>

    <!-- mysql -->

    <dependency>

            <groupId>mysql</groupId>

            <artifactId>mysql-connector-java</artifactId>

            <version>5.0.8</version>

    </dependency>

    <!-- springboot mybatis -->

    <dependency>

<groupId>org.mybatis.spring.boot</groupId>

<artifactId>mybatis-spring-boot-starter</artifactId>

<version>1.3.0</version>

          </dependency>

          <!-- druid -->

          <dependency>

                  <groupId>com.alibaba</groupId>

                  <artifactId>druid</artifactId>

                  <version>1.0.14</version>

          </dependency>

1.2为自动配置类中的bean对象的创建生成属性值

有两个自动配置的类,DataSourceAutoConfguration读取的datasoruce属性

spring.datasource.driverClassName= #数据库驱动

spring.datasoruce.url=  #连接数据库的url

spring.datasource.username=  #连接 数据库的用户名

spring.datasource.password=  #连接数据库的密码

 

MybatisAutoConfiguration

mybatis.mapperLocations=  #配置映射文件(**Mapper.xml文件)的位置

mybatis.typeAliasesPackage=  #配置别名包

mybatis.configuration.mapUnderscoreToCamelCase=  #配置驼峰命名

mybatis.configuration.cacheEnabled=false   #关闭二级缓存

1.3@MapperScan(接口类的包扫描)

启动类中添加mybatis整合springboot的这个注解

@SpringBootApplication

@MapperScan("cn.tedu.mapper")

1.4测试案例

UserController  UserService   UserMapper    UserMapper.xml   User

1.5druid

springboot底层默认的datasource是 tomcat jdbc datasource

application.properties指定一个链接数据源的实现类全路径名称

spring.datasoruce.type=com.alibaba.druid.pool.DruidDataSoruce

2.Springboot的工程打包运行

引入springboot之后,nginx做了动静分离,wen应用打成jar包,启动方法是main方法---main插件,需要在打包时生成主清单属性,springboot专门为maven工程整合了构建插件

2.1引入工程的maven,springboot插件

build

plugins

plugin插件

Spring打包后,neon版本的eclipse存在打包丢失jar包的问题

jackson-databind

jackson-core

 

解决办法: 将缺少的jackson-core手动添加到pom文件中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值