玩转Spring全家桶(一)

8 篇文章 0 订阅

SpringBoot做了哪些配置

  1. DataSourceAutoConfiguration 配置DataSource
  2. DataSourceTransactionManagerAutoConfiguration 配置DataSourceTransactionManager
  3. 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(与前者对应)

Spring Boot中的多数据源配置

⼿工配置两组 DataSource及相关内容 与 Spring Boot协同工作(二选⼀)

  • 配置@Primary类型的Bean(带有@primary注解的bean会被优先选用)

  • 排除Spring Boot的自动配置(exclude={DataSourceAutoConfiguration.clss,DataSourceTransactionManagerAutoConfiguration.class,JdbcTemplateAutoConfiguration.class})

  • DataSourceAutoConfiguration

  • DataSourceTransactionManagerAutoConfiguration

  • JdbcTemplateAutoConfiguration

连接池HikariCP

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

  2. 大量小改进

    · 用 FastStatementList 代替 ArrayList

    · 无锁集合 ConcurrentBag

    · 代理类的优化(比如,用 invokestatic 代替了 invokevirtual)

在Springboot中如何配置:
  • 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 官网

连接池Alibaba Druid

Druid连接池是阿里巴巴开源的数据库连接池项目。Druid连接池为监控而生, 内置强大的监控功能,监控特性不影响性能。功能强大,能防SQL注入,内置 Logging能诊断Hack应用行为

实用的功能

• 详细的监控(真的是全面)

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

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

•core,JdbcTemplate 等相关核心接口和类

•datasource,数据源相关的辅助类

•object,将基本的 JDBC 操作封装成对象

•support,错误码等其他辅助⼯工具

常用的 Bean 注解

通过注解定义 Bean
•@Component
•@Repository
•@Service
•@Controller
•@RestController

简单的 JDBC 操作

JdbcTemplate :
• query

• queryForObject

• queryForList

• update

• execute

SQL 批处理

JdbcTemplate :

  • batchUpdate
    • BatchPreparedStatementSetter

NamedParameterJdbcTemplate :

  • batchUpdate

    • SqlParameterSourceUtils.createBatch

Spring 的事务抽象

事务抽象的核心接口

PlatformTransactionManager
• DataSourceTransactionManager
• HibernateTransactionManager
• JtaTransactionManager

TransactionDefinition
• Propagation
• Isolation
• Timeout
• Read-only status

事务传播特性
传播性描述
PROPAGATION_REQUIRED0当前有事务就用当前的,没有就用新的
PROPAGATION_SUPPORTS1事务可有可无,不是必须的
PROPAGATION_MANDATORY2当前一定要有事务,不然就抛异常
PROPAGATION_REQUIRES_NEW3无论是否有事务,都起个新的事务
PROPAGATION_NOT_SUPPORTED4不支持事务,按⾮非事务方式运行
PROPAGATION_NEVER5不支持事务,如果有事务则抛异常
PROPAGATION_NESTED6当前有事务就在当前事务里再起一个事务
事务隔离特性
隔离性脏读不可重复读幻读
ISOLATION_READ_UNCOMMITTED1
ISOLATION_READ_COMMITTED2×
ISOLATION_REPEATABLE_READ3××
ISOLATION_SERIALIZABLE4×××

编程式事务

TransactionTemplate

  • TransactionCallback

  • TransactionCallbackWithoutResult

PlatformTransactionManager

  • 可以传⼊入TransactionDefinition进行定义
    开启事务注解的方式

  • @EnableTransactionManagement

  • <tx:annotation-driven/>

Spring 的 JDBC 异常抽象

  • Spring 会将数据操作的异常转换为 DataAccessException
  • 无论使用何种数据访问方式,都能使用一样的异常

Spring是怎么认识那些错误码的

  • 通过 SQLErrorCodeSQLExceptionTranslator 解析错误码

  • ErrorCode 定义

    • org/springframework/jdbc/support/sql-error-codes.xml

    • Classpath 下的 sql-error-codes.xml

些常用的注解:

Java的config注解

  • @Configuration 表示是一个配置类
  • @ImportResource 注入配置以外的一些xml的配置文件
  • @ComponentScan 整个spring的容器可以扫描哪一些package下的bean的配置
  • @Bean 存在于整个的SpringApplicationContext当中
  • @ConfigurationProperties 把配置绑定过来,方便使用

定义相关的注解:

  • @Component /@Repository数据访问层的Bean/@Service服务层的Bean
  • @Controller/@RestController Web层的Bean
  • @RequestMapping 定义是在哪些URL下面做一个映射

注入相关注解

  • @Autowired 根据上下文按照类型注入,如果有多个同类型的Bean要配合Qualifier使用/@Qualifier/@Resource 根据名字进行注入
  • @Value 在Bean里面注入一些常量或者是我的一些SpEL的表达式,让它找到一些上下问里面配置的一些东西

事务的本质

  • Spring 的声明式事务本质上是通过 AOP 来增强了了类的功能
  • Spring 的 AOP 本质上就是为类做了一个代理
    • 看似在调⽤用自己写的类,实际⽤用的是增强后的代理类
  • 问题的解法
    • 访问增强后的代理理类的方法,⽽而非直接访问⾃自身的方法

慢 SQL 日志

系统属性配置

• druid.stat.logSlowSql=true

• druid.stat.slowSqlMillis=3000

Spring Boot

• spring.datasource.druid.filter.stat.enabled=true

• spring.datasource.druid.filter.stat.log-slow-sql=true

• spring.datasource.druid.filter.stat.slow-sql-millis=3000

一些注意事项

• 没特殊情况,不不要在⽣生产环境打开监控的 Servlet

• 没有连接泄露露可能的情况下,不不要开启 removeAbandoned

• testXxx 的使⽤用需要注意

• 务必配置合理理的超时时间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值