Springboot
文章
07 数据访问-1jdbc
1 jdbc配置 数据库与数据源不是同一个东西。。。三层关键概念需要理解 数据库驱动mysql、hsqldb 数据源datasource和数据库连接池Harica、Druid 数据库操作工具JDBCTemplates、Mybatis 数据源配置pom.xml 1234<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-jdbc</artifactId></dependency> 嵌入式数据库驱动嵌入式数据库支持:H2、HSQL、Derby。不需要任何配置,被集成到springboot的jar包当中。 12345<dependency> <groupId>org.hsqldb</groupId> <artifactId>hsqldb</artifactId> <scope>run...
07 数据访问-2数据源
1 基本概念JDBCjava数据库链接,java database connectivity。java语言用来规范客户访问数据库的应用程序接口。提供了查询、更新数据库的方法。java.sql与javax.sql主要包括以下类: DriverManager:负责加载不同的驱动程序Driver,返回相应的数据库连接Connection。 Driver:对应数据库的驱动程序。 Connection:数据库连接,负责与数据库进行通信。可以产生SQL的statement. Statement:用来执行SQL查询和更新。 CallableStatement:用以调用数据库中的存储过程。 SQLException:代表数据库联机额的建立和关闭和SQL语句中发生的例情况。 数据源 封装关于数据库访问的各种参数,实现统一管理。 通过数据库的连接池管理,节省开销并提高效率。 简单理解,就是在用户程序与数据库之间,建立新的缓冲地带,用来对用户的请求进行优化,对数据库的访问进行整合。 常见的数据源:DBCP、C3P0、Druid、HikariCP。 2 HikariCP默认数据源配置通用配置以...
07 数据访问-3MyBatis
对象关系映射模型Hibernate。用来实现非常轻量级的对象的封装。将对象与数据库建立映射关系。实现增删查改。MyBatis与Hibernate非常相似。对象关系映射模型ORG。java对象与关系数据库映射的模型。 1 配置MyBatis最佳实践最佳实战:● 引入mybatis-starter● 配置application.yaml中,指定mapper-location位置即可● 编写Mapper接口并标注@Mapper注解● 简单方法直接注解方式● 复杂方法编写mapper.xml进行绑定映射● @MapperScan(“com.atguigu.admin.mapper”) 简化,其他的接口就可以不用标注@Mapper注解 添加MyBatis依赖12345678910<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <vers...
07 数据访问-4Redis
1 简介引入NoSQLRedis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings), 散列(hashes), 列表(lists), 集合(sets), 有序集合(sorted sets) 与范围查询, bitmaps, hyperloglogs 和 地理空间(geospatial) 索引半径查询。 Redis 内置了 复制(replication),LUA脚本(Lua scripting), LRU驱动事件(LRU eviction),事务(transactions) 和不同级别的 磁盘持久化(persistence), 并通过 Redis哨兵(Sentinel)和自动 分区(Cluster)提供高可用性(high availability)。 自动配置1234<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-st...
08 单元测试
springboot with junit4 &junit5 https://segmentfault.com/a/1190000040803747 1 概述spring-boot-starter-testSpringBoot中有关测试的框架,主要来源于 spring-boot-starter-test。一旦依赖了spring-boot-starter-test,下面这些类库将被一同依赖进去: JUnit:java测试事实上的标准。 Spring Test & Spring Boot Test:Spring的测试支持。 AssertJ:提供了流式的断言方式。 Hamcrest:提供了丰富的matcher。 Mockito:mock框架,可以按类型创建mock对象,可以根据方法参数指定特定的响应,也支持对于mock调用过程的断言。 JSONassert:为JSON提供了断言功能。 JsonPath:为JSON提供了XPATH功能。 多种测试模式 @RunWith(SpringJUnit4ClassRunner.class)启动Spring上下文环境。 @Ru...
09 指标监控
1 简介概念未来每一个微服务在云上部署以后,我们都需要对其进行监控、追踪、审计、控制等。SpringBoot就抽取了Actuator场景,使得我们每个微服务快速引用即可获得生产级别的应用监控、审计等功能。 引入1234<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId></dependency> 2 使用简单使用 暴露指标 123456management: endpoints: enabled-by-default: true #暴露所有端点信息 web: exposure: include: '*' #以web方式暴露 访问界面 12345http://localhost:8080/actuator/beanshttp://localhost:8080/actu...
10 高级特性
1 ProfileProfile功能为了方便多环境适配,springboot简化了profile功能。 application-profile功能● 默认配置文件 application.yaml;任何时候都会加载● 指定环境配置文件 application-{env}.yaml● 激活指定环境 ○ 配置文件激活 ○ 命令行激活:java -jar xxx.jar –spring.profiles.active=prod –person.name=haha ■ 修改配置文件的任意值,命令行优先● 默认配置与环境配置同时生效● 同名配置项,profile配置优先 @Profile条件装配功能@Configuration(proxyBeanMethods = false)@Profile(“production”)public class ProductionConfiguration { // ... } Profile 分组功能spring.profiles.group.production[0]=proddbspring...
11 启动过程
1 springboot的启动过程springcontext.run到底干了什么 SpringApplication.run()到底干了什么 服务构建调用SpringApplication的静态run方法。通过一系列配置创建SpringApplication类。 初始化资源加载器 初始化服务类型 初始化spring.factories中定义的初始化类。包括Initializer和Listener 找到启动类 12345678910111213141516171819202122/** * Create a new {@link SpringApplication} instance. The application context will load * beans from the specified primary sources (see {@link SpringApplication class-level} * documentation for details). The instance can be customi...
12 Bean生命周期
1 Bean生命周期创建 使用销毁 2 IOC容器创建3 AOP原理
生命周期回调方法
对于spring的bean来讲,我们默认可以指定两个生命周期回调方法。一个是在ApplicationContext将bean初始化完全完成后,包括注入对应的依赖(例如属性注入)后的回调方法;另一个是在ApplicationContext准备销毁之前的回调方法。 要实现这种回调主要有三种方式: 实现特定的接口。在XML配置文件中指定回调方法。使用JSR-250标准的注解。 为什么要调用生命周期回调函数 因为如果在构造方法中执行一些操作,实际上spring并没有完成依赖注入,调用过程中会报错。因为在spring bean的实例化过程中,是先单独实例化PersonService和EvanService的。然后再完成对EvanService的注入。如果不这么做的话,而选择在PersonService的构造方法里用EvanService做一些事的话,此时的EvanService是还没有完成注入的。 调用构造函数初始化一个对象–> 进行依赖注入 –> 调用生命周期回调函数init方法 1 实现特定的接口针对bean初始化后的回调和ApplicationContext销毁前的回调,...














