统一异常DataAccessException Spring会将常见的数据库操(mysql、oracle、db2…)作异常转换为自己的异常DataAccessException,因此无论使用何种数据访问方式,都能使用一样的异常。 定制错误码 sql-error-codes.xml <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> <beans> <bean id="H2" class="org.springframework.jdbc.support.SQLErrorCodes"> <!-- 复制spring官方sql-error-codes.xml 中 描述 H2 相关的错误码定义 --> <property name="badSqlGrammarCodes"> ....
Spring 的事务抽象 Spring 为数据访问层提供了很多抽象,在这些抽象下面我们可以非常方便的使用统一的方式来操作不同的框架。 Spring 的事务抽象采用了一致的事务模型,方便你使用不同的 JDBC/Hibernate/myBatis DataSource/JTA 事务抽象的核心接口 不同框架的事务管理器都现了 AbstractPlatformTransactionManager,AbstractPlatformTransactionManager 实现了 PlatformTransactionManager,所以 PlatformTransactionManager 的实现类可以是以下类: DataSourceTransactionManager HibernateTransactionManager JtaTransactionManager public interface PlatformTransactionManager { //TransactionStatus 获取事务状态,TransactionDefinition用于设置事务传播特性、隔离级别、....
Spring 的 JDBC 操作类 在 Spring 中的 JDBC 操作主要集中在 spring-jdbc 包中,此包一共分为四个部分: core,JdbcTemplate 等相关核心接口和类 datasource, 数据源相关的辅助类 object, 将基本的 JDBC 操作封装成对象 support, 错误码等其他辅助工具 JdbcTemplate 提供的功能 query queryForObject queryForList update (插入、修改、删除) execute (通用) SQL 批处理 JdbcTemplate.batchUpdate() : BatchPreparedStatementSetter NamedParameterJdbcTemplate.batchUpdate() : SqlParameterSourceUtils.createBatch 引入依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4....
HikariCP HikariCP来自于日语,意为:光。 它本身作为 SpringBoot 2.X 默认的连接池。 "Fast"源于深度优化和大量小改进 字节码级别优化(很多方法通过 JavaAssist 生成) 大量小改进:用 FastStatementList 代替 ArrayList、无锁集合 ConcurrentBag 、 代理类的优化(用 invokestatic 代替 invokevirtual) SpringBoot 中的配置 默认使用 HikariCP application.properties 配置格式 spring.datasource.hikari.* 如果是 SpringBoot 1.x 需要在 maven 中移除默认的 tomcat-jdbc 依赖,并且引入 HikariCP 的 Maven 依赖,并且在 application.properties 配置文件中指定默认的连接池类型 spring.datasource.type=com.zaxxer.hikari.HikariDataSource # 暴露Actuator management.e....
SpringBoot 配置单数据源 引入依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.1.RELEASE</versio....
框架层集成Swagger文档 API虽然没有直接的UI,当API体验是十分重要的。API体验指的就是API文档,文档的书写时一个繁琐的体力活儿。大部分开发人员都不太愿意写文档。所以如果框架能够直接支持文档的自动生成,就会大大简化企业维护API文档的工作。 Springboot支持Swagger文档的自动生成。Swagger是基于当前业界Open API 规范开发的工具链。 Springboot中启用Swagger功能 引入依赖 <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> </dependency> ....
异步调用 在微服务中,多数场景下采用:请求/响应 同步调用的风格,但在有些场景下并不需要同步、或是同步调用的方式性能开销比较大,这是则需要异步调用。(比如:邮件、短信等…) 异步支持也是一个服务框架的基础能力,Springboot通过Java线程池原生支持异步操作。 配置一个服务线程池即可。 ThreadPoolTaskExecutor 配置一个服务线程池 public class AppConfig { public static final String ASYNC_EXECUTOR_NAME = "asyncExecutor"; @Bean(name=ASYNC_EXECUTOR_NAME) public Executor asyncExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); // for passing in request scope context executor.setTaskDecorator(new ContextCopyingDecorator())....