Spring全家桶--数据库相关

目录

如何配置数据源 

Spring Boot 做了哪些配置 

数据源相关配置属性 

数据库连接池

HikariCP 

Alibaba Druid 

通过 Spring JDBC 访问数据库 

了解 Spring 的抽象 

Spring 的事务抽象 

Spring 的 JDBC 异常抽象 

O/R Mapping 实践 

常⽤的 Bean 注解 

认识 Spring Data JPA 

Hibernate 

Java Persistence API 

Spring Data 

常⽤ JPA 注解 

Project Lombok 

Spring Data JPA 的基本用法 

通过 MyBatis 操作数据库 

NoSQL 实践 

Docker 容器辅助开发

Spring Data MongoDB 的基本⽤法 

Spring Data Redis 的基本⽤法 

Redis 的几种运⾏模式

Spring 的缓存抽象 

Project Reactor

Project Reactor 介绍 

通过 Reactive 的⽅式访问 NoSQL 

通过 Reactive 的⽅式访问数据 RDBMS 

Spring AOP 的基本概念

监控 DAO 层的简单方案 


如何配置数据源 

Spring Boot 做了哪些配置 

DataSourceAutoConfiguration 配置 DataSource  

DataSourceTransactionManagerAutoConfiguration 配置 DataSourceTransactionManager  

JdbcTemplateAutoConfiguration 配置 JdbcTemplate 

 

数据源相关配置属性 

通⽤ 

  • spring.datasource.url=jdbc:mysql://localhost/test 
  • spring.datasource.username=dbuser
  • spring.datasource.password=dbpass 
  • spring.datasource.driver-class-name=com.mysql.jdbc.Driver(可选) 

初始化内嵌数据库 

  • spring.datasource.initialization-mode=embedded|always|never 
  • spring.datasource.schema与spring.datasource.data确定初始化SQL⽂文件 
  • spring.datasource.platform=hsqldb | h2 | oracle | mysql | postgresql(与前者对应) 

配置多数据源的注意事项 

  1. 不同数据源的配置要分开
  2. 关注每次使⽤用的数据源
  • 有多个DataSource时系统如何判断 
  • 对应的设施(事务、ORM等)如何选择DataSource 

Spring Boot中的多数据源配置 

⼿工配置两组 DataSource 及相关内容 

Spring Boot协同工作(二选⼀) 

  • 配置@Primary类型的Bean 
  • 排除Spring Boot的⾃动配置 
  • DataSourceAutoConfiguration 
  • DataSourceTransactionManagerAutoConfiguration 
  • JdbcTemplateAutoConfiguration 

 

数据库连接池

连接池选择时的考量量点 

  • 可靠性 
  • 性能  
  • 功能 
  • 可运维性 
  • 可扩展性  
  • 其他   

 

HikariCP 

HikariCP 为什么快 

1. 字节码级别优化(很多方法通过 JavaAssist 生成)

2. ⼤量小改进 

  • 用 FastStatementList 代替 ArrayList
  • 无锁集合 ConcurrentBag
  • 代理类的优化(⽐如,用 invokestatic 代替了 invokevirtual) 

 

Spring Boot 2.x 中 默认使⽤用 HikariCP

spring.datasource.hikari.*  

Spring Boot 1.x  默认使用 Tomcat 连接池,需要移除 tomcat-jdbc 依赖

  • spring.datasource.type=com.zaxxer.hikari.HikariDataSource 

 

常用 HikariCP 配置参数 

常用配置 

  • spring.datasource.hikari.maximumPoolSize=10 
  • spring.datasource.hikari.minimumIdle=10 
  • spring.datasource.hikari.idleTimeout=600000 
  • spring.datasource.hikari.connectionTimeout=30000 
  • spring.datasource.hikari.maxLifetime=1800000 

其他配置详见 HikariCP 官⽹网  

https://github.com/brettwooldridge/HikariCP 

 

Alibaba Druid 

“Druid连接池是阿⾥巴巴开源的数据库连接池项目。Druid连接池为监控⽽生, 内置强⼤的监控功能,监控特性不影响性能。功能强⼤大,能防SQL注⼊入,内置 Logging能诊断Hack应⽤行为。”                                          –Alibaba Druid 官⽅方介绍 

实⽤的功能

  • 详细的监控(真的是全面) 
  • ExceptionSorter,针对主流数据库的返回码都有支持 
  • SQL 防注⼊
  • 内置加密配置 众多扩展点,⽅便进行定制 

数据源配置 

直接配置 DruidDataSource 

通过 druid-spring-boot-starter 

  • spring.datasource.druid.* 

Filter 配置 

  • spring.datasource.druid.filters=stat,config,wall,log4j (全部使⽤用默认值) 

密码加密 

  • spring.datasource.password=<加密密码> 
  • spring.datasource.druid.filter.config.enabled=true 
  • spring.datasource.druid.connection-properties=config.decrypt=true;config.decrypt.key=<public-key> 

SQL 防注入 

  • spring.datasource.druid.filter.wall.enabled=true 
  • spring.datasource.druid.filter.wall.db-type=h2 
  • spring.datasource.druid.filter.wall.config.delete-allow=false
  • spring.datasource.druid.filter.wall.config.drop-table-allow=false 

Druid Filter 

  • 用于定制连接池操作的各种环节
  • 可以继承 FilterEventAdapter 以便便⽅方便便地实现 Filter 
  • 修改 META-INF/druid-filter.properties 增加 Filter 配置 

 

通过 Spring JDBC 访问数据库 

Spring JDBC 操作类 

spring-jdbc 

  • core,JdbcTemplate 等相关核心接⼝和类 
  • datasource,数据源相关的辅助类 
  • object,将基本的 JDBC 操作封装成对象 
  • support,错误码等其他辅助工具 

 

简单的 JDBC 操作 

JdbcTemplate 

  • query 
  • queryForObject 
  • queryForList 
  • update
  • execute 

 

SQL 批处理 

JdbcTemplate 

batchUpdate 

  • BatchPreparedStatementSetter 

NamedParameterJdbcTemplate 

batchUpdate 

  • SqlParameterSourceUtils.createBatch 

 

了解 Spring 的抽象 

Spring 的事务抽象 

一致的事务模型 

  • JDBC/Hibernate/myBatis 
  • DataSource/JTA 

 

事务抽象的核⼼接口 

PlatformTransactionManager 

• DataSourceTransactionManager 

• HibernateTransactionManager

• JtaTransactionManager 

TransactionDefinition 

• Propagation 

• Isolation

• Timeout 

• Read-only status 

 

事务传播特性 

传播性

描述

PROPAGATION_REQUIRED

0

当前有事务就⽤当前的,没有就⽤新的

PROPAGATION_SUPPORTS

1

事务可有可无,不是必须的

PROPAGATION_MANDATORY

2

当前一定要有事务,不然就抛异常

PROPAGATION_REQUIRES_NEW

3

⽆论是否有事务,都起个新的事务

PROPAGATION_NOT_SUPPORTED

4

不支持事务,按非事务⽅式运行

PROPAGATION_NEVER

5

不支持事务,如果有事务则抛异常

PROPAGATION_NESTED

6

当前有事务就在当前事务里里再起⼀个事务

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值