Spring Boot 2系列(十):Spring 缓存体系
Spring 对各种缓存技术抽象成了统一的接口和常用的操作方法,对不同的缓存技术,如 redis, ehcache 等透明地添加缓存的支持。
只要使用了缓存注解@EnableCaching
,Spring Boot就会自动配置缓存基本设置。
Spring 对各种缓存技术抽象成了统一的接口和常用的操作方法,对不同的缓存技术,如 redis, ehcache 等透明地添加缓存的支持。
只要使用了缓存注解@EnableCaching
,Spring Boot就会自动配置缓存基本设置。
要理解 Spring Boot 的事务,必须先理解 Spring 的事务机制,可以参考Spring事务机制。
在实际开发中,当我们调用一个基于Spring
的Service
接口方法时,可能会产生服务接口方法的嵌套调用的情况,Spring通过事务传播行为控制为当前的事务如何传播到被嵌套调用的目标服务接口方法中
Spring在TransactionDefinition
接口中规定了7
种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播。
通常项目中打印 SQL 执行语句参数位置是被占位符替换的,查询用到的参数并不在 SQL 语句中而是额外显示,也无法看到 SQL 的执行结果。
可以使用Log4jdbc-log4j2
神器,在打印中直接看到完整的 SQL 语句,并格式化打印出执行结果。
Log4jdbc-log4j2是Log4jdbc
的增强版,官网:http://log4jdbc.brunorozendo.com/
官方说明:Apache Log4j 2
是对 Log4j 的升级,并提供了许多 Logback 可用的改进,同时解决了 Logback 体系结构中的一些固有问题。
Spring Boot 提供了一些非常实用的附加功能组件,比如应用监控模块 Actuator。 Actuator 可以采集应用和系统环境的一些指标数据,通过端点(endpoint)对外提供这些数据,用户可根据这些数据来对应用进行监控和管理。可以选择使用HTTP、JMX、SSH 来管理和监控。该组件会自动对应用审计,健康和收集相关指标信息。
spring-boot-actuator 提供了很多监控应用程序所需的神奇的运维特性,可以查看了解应用程序运行时的内部工作细节,可以查看IoC
容器都注册了那些Bean
、Spring MVC控制器的路径映射、请求跟踪、系统环境、配置属性、日志设置、程序信息、活动线程快照、堆存储信息,还可以通过端口来关闭应用。
Actuator 组件非容易地使用,只需要添加依赖 spring-boot-starter-actuator。Spring Boot Actuator 官方文档。
Spring Data Rest 依赖于 JPA
, 支持将 JPA,MongoDB,Neo4j,GemFire和Cassandra的 Repository自动转换为Rest
服务。
只需定义实体类和Repository
,就可以直接将查出的数据以Rest
服务方式返回,可以对数据库执行CRUD
操作,省略了Controller
层和Service
。此方式适合于只需对数据库进行CRUD
操作的项目,不适合需要对业务逻辑判断封装操作的项目。
Spring Data Rest 官网:https://docs.spring.io/spring-data/rest/docs/current/reference/html/
JPA 即 Java Persistence API,是一个基于O/R映射的标准规范。Hibernate 是该规范的实现,Hibernate 是非常流行的对象关系映射框架(ORM
),是SSH
组合开发框架重要组件。
Spring Data JPA 是 Spring Data 的一个子项目,它提供了基于 JPA 的 Repository 减少了大量的数据访问操作的代码。JpaRepository 接口提供了通用的数据访问方法。
始终建议看官方文档:
Spring Boot 2.0.3 > Use Spring Data Repositories
Spring Data JPA - Reference Documentation
Spring Boot Web应用默认内置了精简版的Tomcat服务器,可以直接执行jar来启动运行应用。如果需要将应用部署到外部Tomcat服务器就需要修改部份配置。
项目通过Maven来管理依赖。Spring Boot默认支持 jar
包方式,并可直接通过 jar
命令来运行项目应用。若需要将项目打成war部署在外部的Tomcat上运行,需要做些修改。
Spring提供计划任务实现的注解,使用非常简单。首先通过配置类注解(@EnableScheduling
)开启对计划任务的支持,然后在方法上注解(@Scheduled
)申明这是一个计划任务。