mall01-spring基础02-配置数据源

备注:以下笔记梳理来自极客时间-spring全家桶学习

1 配置数据源基本思路

  1. 引入对应数据库驱动
  2. 引入jdbc依赖–spring-boot-starter-jdbc
  3. 获取DataSourceBean
  4. [检查]通过/acurator/beans查看bean;

按需配置

如果是直接配置相关的bean这里需要注意一个数据源通常包括如下bean:

  1. 数据源相关
    • DataSources(根据选择的连接池实现决定)
  2. 事务相关(可选)
    • PlatformTransactionManager
    • TransactionTemplate
  3. 操作相关(可选)
    • JdbcTemplate

2 数据源相关配置属性

image-20201013092532355

3 配置多数据源

两个注意事项

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

spring boot的配置方法

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

具体配置及排除如下所示:

image-20201013092954194

4 连接池:HikariCP

hikaricp为什么快:

  1. 字节码级别优化(很多⽅方法通过 JavaAssist ⽣生成)
  2. ⼤大量量⼩小改进
    • ⽤用 FastStatementList 代替 ArrayList
    • ⽆无锁集合 ConcurrentBag
    • 代理理类的优化(⽐比如,⽤用 invokestatic 代替了了 invokevirtual)

spring相关配置

image-20201013132850775

常用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

5 连接池Druid

druid使用功能

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

数据源配置

image-20201013133152765

数据源配置:

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=
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

依赖配置:需要排除HikariCP

image-20201013133349154

一个详细配置示例

spring.output.ansi.enabled=ALWAYS

spring.datasource.url=jdbc:h2:mem:foo
spring.datasource.username=sa
spring.datasource.password=n/z7PyA5cvcXvs8px8FVmBVpaRyNsvJb3X7YfS38DJrIg25EbZaZGvH4aHcnc97Om0islpCAPc3MqsGvsrxVJw==

spring.datasource.druid.initial-size=5
spring.datasource.druid.max-active=5
spring.datasource.druid.min-idle=5
spring.datasource.druid.filters=conn,config,stat,slf4j

spring.datasource.druid.connection-properties=config.decrypt=true;config.decrypt.key=${public-key}
spring.datasource.druid.filter.config.enabled=true

spring.datasource.druid.test-on-borrow=true
spring.datasource.druid.test-on-return=true
spring.datasource.druid.test-while-idle=true

public-key=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALS8ng1XvgHrdOgm4pxrnUdt3sXtu/E8My9KzX8sXlz+mXRZQCop7NVQLne25pXHtZoDYuMh3bzoGj6v5HvvAQ8CAwEAAQ==

选择连接池的考量点

image-20201013133459699

6 spring操作jdbc

6.1 spring操作jdbc的类

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

6.2 spring常用bean

通过注解定义 Bean

  • @Component:通用注解定义通用bean
  • @Repository:数据操作的仓库
  • @Service:业务服务
  • @Controller:spring mvc
  • @RestController

6.3 常用jdbc操作

JdbcTemplate
• query
• queryForObject
• queryForList
• update
• execute

6.4 sql批处理操作

JdbcTemplate
• batchUpdate
• BatchPreparedStatementSetter
NamedParameterJdbcTemplate
• batchUpdate
• SqlParameterSourceUtils.createBatch

7 spring事务

7.1 spring事务抽象

⼀一致的事务模型

• JDBC/Hibernate/myBatis
• DataSource/JTA

事务抽象的核⼼心接⼝口

image-20201013135024864

默认传播特性

image-20201013135043703

事务传播特性

image-20201013135135271

7.2 编程式事务

ransactionTemplate
• TransactionCallback
• TransactionCallbackWithoutResult
PlatformTransactionManager
• 可以传⼊入TransactionDefinition进⾏行行定义

7.3 声明式事务

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5G1DrVnj-1602596507462)(/Users/fwd/Library/Application Support/typora-user-images/image-20201013135347462.png)]

8 spring jdbc异常抽象

Spring 会将数据操作的异常转换为 DataAccessException,⽆无论使⽤用何种数据访问⽅方式,都能使⽤用⼀一样的异常。spring 通过SQLErrorCodeSQLExceptionTranslator 解析错误

ErrorCode 定义
• org/springframework/jdbc/support/sql-error-codes.xml
• Classpath 下的 sql-error-codes.xml

image-20201013135721508

定义错误码解析逻辑如下所示

image-20201013135922162

问题备忘

spring编程式事务和声明式事务?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Qo5hASp9-1602596507464)(/Users/fwd/Library/Application Support/typora-user-images/image-20201013134913093.png)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值