Springboot概括
2019年11月12日
16:42
-
- 介绍
Springboot是一个基于spring框架的工具框架,可以实现spring容器的快速搭建,快速配置,快速启动
-
- 特性
独立运行的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手动搭建
2019年9月16日
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-server(hello world)
测试当前系统是否具备开发spring 和sprigmvc框架代码的能力
HelloController 注入Service
RequestMapping("hello")
测试代码见源码笔记
springboot的全局配置文件
2019年11月12日
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自动配置原理
2019年11月12日
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为前缀的内容
注意事项:
- 前缀满足条件1906
1906.*支持驼峰命名
- 属性就是除了前缀的名称 1906.className 属性中必须有className
- 支持多级读取
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和持久层整合
2019年11月13日
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文件中