🍊
翻译橙
🍊返回主站🤖参与贡献
  • hello,这里是翻译橙
  • spring boot参考文档
    • 1. 法律
    • 2. 寻求帮助
    • 3. 文档概述
    • 4. 入门
    • 5. 升级Spring Boot
    • 6. 使用 Spring Boot 进行开发
      • 6.1. 构建系统
      • 6.2. 构建你的代码
      • 6.3. 配置类
      • 6.4. 自动配置
      • 6.5. Spring Bean 和依赖注入
      • 6.6. 使用@SpringBootApplication注解
      • 6.7. 运行您的应用程序
      • 6.8. 开发者工具
      • 6.9. 打包您的生产应用程序
      • 6.10. 接下来读什么
    • 7.核心特性
      • 7.1. SpringApplication
      • 7.2. 外部化配置
      • 7.3.Profile配置
      • 7.4.日志记录
      • 7.5.国际化
      • 7.6 面向切面的编程
      • 7.7. JSON
      • 7.8. 任务执行与调度
      • 7.9. 单元测试
        • 7.9.1. 测试范围依赖
        • 7.9.2. 测试 Spring 应用程序
        • 7.9.3. 测试 Spring Boot 应用程序
        • 7.9.4. 测试容器
        • 7.9.5. 测试工具
      • 7.10. Docker Compose 支持
      • 7.11. 测试容器支持
      • 7.12. 创建您自己的自动配置
      • 7.13. Kotlin 支持
      • 7.14 SSL
      • 7.15.接下来要读什么
    • 8. 网络
      • 8.1. Servlet Web 应用程序
        • 8.1.1. “Spring Web MVC 框架”
        • 8.1.2. JAX-RS 和Jersey
        • 8.1.3. 嵌入式 Servlet 容器支持
      • 8.2 反应式网络应用程序
        • 8.2.1. “Spring WebFlux 框架”
        • 8.2.2. 嵌入式反应式服务器支持
        • 8.2.3. 反应式服务器资源配置
      • 8.3. 优雅关机
      • 8.4. spring安全
        • 8.4.1. MVC安全
        • 8.4.2. WebFlux 安全
        • 8.4.3. OAuth2
        • 8.4.4. SAML 2.0
      • 8.5. spring 会话
      • 8.6.GraphQL
      • 8.7. Spring HATEOAS
      • 8.8.接下来读什么
    • 9. 数据
      • 9.1. SQL数据库
      • 9.2. 使用 NoSQL 技术
      • 9.3. 接下来读什么
    • 10. 消息
      • 10.1. JMS
      • 10.2. AMQP
      • 10.3. Apache Kafka 支持
      • 10.4. Apache Pulsar 支持
      • 10.5. RSocket
      • 10.6. Spring Integration
      • 10.7. WebSockets
      • 10.8. What to Read Next
    • 11. IO
      • 11.1. 缓存
      • 11.2. Hazelcast
      • 11.3. Quartz 调度程序
      • 11.4. 发送电子邮件
      • 11.5. 验证
      • 11.6. 调用 REST 服务
      • 11.7. web services
      • 11.8. 使用 JTA 进行分布式事务
      • 11.9. 接下来读什么
    • 12. 容器镜像
  • Spring核心功能
    • 1.IOC容器和Bean简介
      • 1.2. 容器概述
      • 1.3. Bean概述
      • 1.4. 依赖项
        • 1.4.1. 依赖注入
        • 1.4.2. 详细的依赖关系和配置
        • 1.4.3. 使用depends-on
        • 1.4.4. 延迟初始化的 Bean
        • 1.4.5. 自动装配协作者
        • 1.4.6. 方法注入
    • 2. Resources
      • 2.1. 介绍
      • 2.2. Resource接口
      • 2.3. 内置Resource实现
      • 2.4. ResourceLoader接口
      • 2.5. ResourcePatternResolver接口
      • 2.6. ResourceLoaderAware接口
      • 2.7. 资源作为依赖
      • 2.8. 应用程序上下文和资源路径
    • 3. 验证、数据绑定和类型转换
      • 3.1. 使用 Spring 的 Validator 接口进行验证
      • 3.2. 将代码解析为错误消息
      • 3.3. Bean 操作和BeanWrapper
      • 3.4. spring类型转换
      • 3.5. spring字段格式
      • 3.6. 配置全局日期和时间格式
      • 3.7. Java Bean 验证
    • 4. SpEL表达式
    • 5. Spring 面向切面编程
      • 5.1. AOP 概念
      • 5.2. Spring AOP 的能力和目标
      • 5.3. AOP 代理
      • 5.4. @AspectJ 支持
        • 5.4.1. 启用@AspectJ 支持
        • 5.4.2. 声明一个切面
        • 5.4.3. 声明切入点
        • 5.4.4. 声明切点
        • 5.4.5. 切面说明
        • 5.4.6. 切面实例化模型
        • 5.4.7. AOP 示例
      • 5.5. 基于模式的 AOP 支持
      • 5.6. 选择要使用的 AOP 声明样式
      • 5.7. 混合切面类型
      • 5.8. 代理机制
      • 5.9. @AspectJ 代理的程序化创建
      • 5.10. 在 Spring 应用程序中使用 AspectJ
      • 5.11.更多资源
    • 6. Spring AOP API
      • 6.1. Spring中的切入点API
      • 6.2. Spring 中的 Advice API
      • 6.3. Spring 中的 Advisor API
      • 6.4. 使用ProxyFactoryBean创建 AOP 代理
      • 6.5. 简洁的代理定义
      • 6.6. 以编程方式创建 AOP 代理ProxyFactory
      • 6.7. 操作切面对象
      • 6.8. 使用“自动代理”工具
      • 6.9. 使用TargetSource实现
      • 6.10. 定义新的切面类型
    • 7. 空指针安全
    • 8. 数据缓冲器和编解码器
    • 9. 日志
    • 10. 附录
      • 10.1. XML 模式
      • 10.2. 自定义XML Schema
        • 10.2.1. 创作 Schema
        • 10.2.2. 编码一个NamespaceHandler
        • 10.2.3. 使用BeanDefinitionParser
        • 10.2.4. 注册处理程序和模式
        • 10.2.5. 在 Spring XML 配置中使用自定义扩展
        • 10.2.6. 更详细的例子
      • 10.3. 应用程序启动步骤
  • 使用redis实现分布式锁
  • Java 安全标准算法名称
  • JDK 9 JEP
  • JDK 10 JEP
  • 人件
    • 《人件》
    • 第一部分 管理人力资源
      • 01 此时此刻,一个项目正在走向失败
      • 02 干酪汉堡,做一个,卖一个
      • 03 维也纳在等你
      • 04 质量——如果时间允许
      • 05 再谈帕金森定律
      • 06 苦杏素
    • 第二部分 办公环境
      • 07 家具警察
      • 08 “朝九晚五在这里啥也完成不了。”
      • 09 在空间上省钱
      • 间奏曲:生产效率度量和不明飞行物
      • 10 大脑时问与身体时间
      • 11 电话
      • 12 门的回归
      • 13 采取保护步骤
    • 第三部分 正确的人
      • 14 霍恩布洛尔因素
      • 15 谈谈领导力
      • 16 雇一名杂耍演员
      • 17 与他人良好合作
      • 18 童年的终结
      • 19 在这儿很开心
      • 20 人力资本
    • 第四部分 高效团队养成
      • 21 整体大于部分之和
      • 22 黑衣团队
      • 23 团队自毁
      • 24 再谈团队自毁
      • 25 竞争
      • 26 一顿意面晚餐
      • 27 敞开和服
      • 28 团队形成的化学反应
    • 第五部分 沃土
      • 29 自我愈复系统
      • 30 与风险共舞
      • 3l 会议、独白和交流
      • 32 终极管理罪恶得主是……
      • 33 “邪恶”电邮
      • 34 让改变成为可能
      • 35 组织型学习
      • 36 构建社区
    • 第六部分 快乐地工作
      • 37 混乱与秩序
      • 38 自由电子
      • 39 霍尔加·丹斯克
由 GitBook 提供支持
在本页

这有帮助吗?

在GitHub上编辑
  1. spring boot参考文档
  2. 9. 数据

9.1. SQL数据库

上一页9. 数据下一页9.2. 使用 NoSQL 技术

最后更新于1年前

这有帮助吗?

Spring为使用 SQL 数据库提供了广泛的支持,从使用直接 JDBC 访问JdbcClient或JdbcTemplate完成“对象关系映射”技术(例如 Hibernate)。 提供了额外级别的功能:Repository直接从接口创建实现并使用约定从方法名称生成查询。

9.1.1. 配置数据源

Java 的javax.sql.DataSource接口提供了使用数据库连接的标准方法。传统上,DataSource使用 URL以及一些凭据来建立数据库连接。

请参阅以获取更高级的示例,通常是为了完全控制数据源的配置。

嵌入式数据库支持

使用内存嵌入式数据库开发应用程序通常很方便。显然,内存数据库不提供持久存储。您需要在应用程序启动时填充数据库,并准备好在应用程序结束时丢弃数据。

“操作方法”部分包括。

Spring Boot 可以自动配置嵌入式、和数据库。您无需提供任何连接 URL。您只需包含对要使用的嵌入式数据库的构建依赖项。如果类路径上有多个嵌入式数据库,请设置spring.datasource.embedded-database-connection配置属性来控制使用哪一个。将属性设置为none禁用嵌入式数据库的自动配置。

如果您在测试中使用此功能,您可能会注意到,无论您使用的应用程序上下文数量如何,整个测试套件都会重复使用同一个数据库。如果您想确保每个上下文都有一个单独的嵌入式数据库,您应该设置spring.datasource.generate-unique-name为true。

例如,典型的 POM 依赖关系如下:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
    <groupId>org.hsqldb</groupId>
    <artifactId>hsqldb</artifactId>
    <scope>runtime</scope>
</dependency>

您需要依赖spring-jdbc嵌入式数据库才能自动配置。在此示例中,它是通过 spring-boot-starter-data-jpa传递地拉入的。

如果出于某种原因,您确实为嵌入式数据库配置了连接 URL,请注意确保禁用数据库的自动关闭功能。如果你使用H2,你应该设置DB_CLOSE_ON_EXIT=FALSE。如果您使用HSQLDB,您应该确保不使用shutdown=true。禁用数据库的自动关闭可以让 Spring Boot 控制数据库何时关闭,从而确保在不再需要访问数据库时关闭数据库。

连接到生产数据库

还可以使用池来自动配置生产数据库连接DataSource。

数据源配置

数据源配置由spring.datasource.*. 例如,您可以在application.properties 中声明以下部分:

spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=dbuser
spring.datasource.password=dbpass

您至少应该通过设置spring.datasource.url属性来指定 URL。否则,Spring Boot 会尝试自动配置嵌入式数据库

Spring Boot 可以从 URL 推断出大多数数据库的 JDBC 驱动程序类。如果需要指定特定的类,可以使用该spring.datasource.driver-class-name属性。

为了创建池DataSource,我们需要能够验证有效的Driver类是否可用,因此我们在执行任何操作之前进行检查。换句话说,如果您设置了spring.datasource.driver-class-name=com.mysql.jdbc.Driver,那么该类必须是可加载的。

spring.datasource.tomcat.max-wait=10000
spring.datasource.tomcat.max-active=50
spring.datasource.tomcat.test-on-borrow=true

如果没有可用连接,这会将池设置为在抛出异常之前等待 10000 毫秒,将最大连接数限制为 50,并在从池中借用连接之前验证连接。

支持的连接池

Spring Boot 使用以下算法来选择特定的实现:

  1. 否则,如果 Tomcat 池DataSource可用,我们就使用它。

  2. 如果 HikariCP、Tomcat 和 DBCP2 都不可用,而 Oracle UCP 可用,则我们使用它。

如果您使用spring-boot-starter-jdbc或spring-boot-starter-data-jpa“starters”,您会自动获得对HikariCP.

您可以完全绕过该算法并通过设置spring.datasource.type属性来指定要使用的连接池。如果您在 Tomcat 容器中运行应用程序,这一点尤其重要,因为默认提供 tomcat-jdbc。

始终可以使用DataSourceBuilder添加任何连接池. 如果您定义自己的DataSourcebean,则不会发生自动配置。DataSourceBuilder支持以下连接池:

  • HikariCP

  • Tomcat 池化Datasource

  • Commons DBCP2

  • Oracle UCP 和OracleDataSource

  • Spring框架的SimpleDriverDataSource

  • H2JdbcDataSource

  • PostgreSQLPGSimpleDataSource

  • C3P0

连接到 JNDI 数据源

如果将 Spring Boot 应用程序部署到应用程序服务器,您可能希望使用应用程序服务器的内置功能来配置和管理数据源,并使用 JNDI 访问它。

spring.datasource.jndi-name属性可用作spring.datasource.url、spring.datasource.username和spring.datasource.password属性的替代,以从特定 JNDI 位置访问DataSource。例如,以下部分application.properties显示了如何访问 JBoss AS 定义的DataSource:

spring.datasource.jndi-name=java:jboss/datasources/customers

9.1.2. 使用 JdbcTemplate

SpringJdbcTemplate和NamedParameterJdbcTemplate类是自动配置的,您可以使用@Autowire将它们直接添加到您自己的 bean 中,如以下示例所示:

@Component
public class MyBean {
​
    private final JdbcTemplate jdbcTemplate;
​
    public MyBean(JdbcTemplate jdbcTemplate) {
        this.jdbcTemplate = jdbcTemplate;
    }
​
    public void doSomething() {
        this.jdbcTemplate ...
    }
​
}

您可以通过属性来自定义模板的一些属性spring.jdbc.template.*,如下例所示:

spring.jdbc.template.max-rows=500

NamedParameterJdbcTemplate 在幕后重用相同的JdbcTemplate 实例。如果定义了多个JdbcTemplate并且不存在主要候选者,则不会自动配置 NamedParameterJdbcTemplate。

9.1.3. 使用 JdbcClient

SpringJdbcClient是根据NamedParameterJdbcTemplate自动配置的. 您也可以将其直接注入到您自己的 bean 中,如以下示例所示:

@Component
public class MyBean {
​
    private final JdbcClient jdbcClient;
​
    public MyBean(JdbcClient jdbcClient) {
        this.jdbcClient = jdbcClient;
    }
​
    public void doSomething() {
        this.jdbcClient ...
    }
​
}

如果您依靠自动配置来创建底层 JdbcTemplate,则客户端也会考虑使用 spring.jdbc.template.*属性的任何自定义。

9.1.4. JPA 和 Spring Data JPA

Java Persistence API 是一种标准技术,可让您将对象“映射”到关系数据库。spring-boot-starter-data-jpaPOM提供了一种快速入门方法。它提供了以下关键依赖项:

  • Hibernate:最流行的 JPA 实现之一。

  • Spring Data JPA:帮助您实现基于 JPA 的存储库。

  • Spring ORM:Spring 框架的核心 ORM 支持。

实体类

任何用@Entity、@Embeddable、 或@MappedSuperclass注解的类都会被考虑。典型的实体类类似于以下示例:

@Entity
public class City implements Serializable {
​
    @Id
    @GeneratedValue
    private Long id;
​
    @Column(nullable = false)
    private String name;
​
    @Column(nullable = false)
    private String state;
​
    // ... additional members, often include @OneToMany mappings
​
    protected City() {
        // no-args constructor required by JPA spec
        // this one is protected since it should not be used directly
    }
​
    public City(String name, String state) {
        this.name = name;
        this.state = state;
    }
​
    public String getName() {
        return this.name;
    }
​
    public String getState() {
        return this.state;
    }
​
    // ... etc
​
}

Spring Data JPA 存储库

您可以使用 @EnableJpaRepositories自定义位置来查找存储库。

以下示例显示了典型的 Spring Data 存储库接口定义:

public interface CityRepository extends Repository<City, Long> {
​
    Page<City> findAll(Pageable pageable);
​
    City findByNameAndStateAllIgnoringCase(String name, String state);
​
}

Spring Data JPA 存储库支持三种不同的引导模式:默认、延迟和懒加载。要启用延迟或懒加载引导,请分别将该spring.data.jpa.repositories.bootstrap-mode属性设置为deferred或lazy。当使用延迟或惰性引导时,自动配置EntityManagerFactoryBuilder将使用上下文AsyncTaskExecutor(如果有)作为引导执行器。如果存在多个,则将使用applicationTaskExecutor指定的那个。

使用延迟或惰性引导时,请确保在应用程序上下文引导阶段之后延迟对 JPA 基础结构的任何访问。您可以使用它SmartInitializingSingleton来调用任何需要 JPA 基础结构的初始化。对于作为 Spring bean 创建的 JPA 组件(例如转换器),请使用ObjectProvider延迟解析依赖项(如果有)。

Spring Data Envers 存储库

要使用 Spring Data Envers,请确保您的存储库扩展RevisionRepository如同以下示例:

public interface CountryRepository extends RevisionRepository<Country, Long, Integer>, Repository<Country, Long> {
​
    Page<Country> findAll(Pageable pageable);
​
}

创建和删除 JPA 数据库

默认情况下,仅当您使用嵌入式数据库(H2、HSQL 或 Derby)时才会自动创建 JPA 数据库。您可以使用spring.jpa.*属性显式配置 JPA 设置。例如,要创建和删除表,您可以将以下行添加到您的application.properties:

spring.jpa.hibernate.ddl-auto=create-drop

Hibernate 自己的内部属性名称(如果您记得更好的话)是hibernate.hbm2ddl.auto。您可以通过使用spring.jpa.properties.*(在将它们添加到实体管理器之前删除前缀)来设置它以及其他 Hibernate 本机属性。以下行显示了为 Hibernate 设置 JPA 属性的示例:

spring.jpa.properties.hibernate[globally_quoted_identifiers]=true

前面示例中的行将hibernate.globally_quoted_identifiers属性的true值传递给Hibernate 实体管理器。

默认情况下,DDL 执行(或验证)被推迟到ApplicationContext开始为止。还有一个spring.jpa.generate-ddl标志,但如果 Hibernate 自动配置处于活动状态,则不会使用它,因为ddl-auto设置了更细粒度。

在视图中打开EntityManager

9.1.5. Spring Data JDBC

Spring Data 包括对 JDBC 的存储库支持,并将自动为CrudRepository. 对于更高级的查询,提供了@Query注释。

当类路径上有必要的依赖项时,Spring Boot 将自动配置 Spring Data 的 JDBC 存储库。可以将它们添加到您的项目中,并仅依赖于spring-boot-starter-data-jdbc. 如有必要,您可以通过向应用程序添加@EnableJdbcRepositories注释或AbstractJdbcConfiguration子类来控制 Spring Data JDBC 的配置。

9.1.6. 使用 H2 的 Web 控制台

  • 您正在开发一个基于 servlet 的 Web 应用程序。

  • 位于类路径上的com.h2database:h2。

如果您不使用 Spring Boot 的开发人员工具,但仍想使用 H2 的控制台,则可以将spring.h2.console.enabled属性配置为true。

H2 控制台仅供开发期间使用,因此您应注意确保在生产中spring.h2.console.enabled未将其设置为true。

更改 H2 控制台的路径

默认情况下,控制台位于/h2-console。您可以使用spring.h2.console.path属性自定义控制台的路径。

在安全应用程序中访问 H2 控制台

H2 Console 使用框架,仅用于开发,没有实施 CSRF 保护措施。如果您的应用程序使用 Spring Security,则需要将其配置为

  • 对针对控制台的请求禁用 CSRF 保护,

  • 将标头设置X-Frame-Options为SAMEORIGIN来自控制台的响应。

在简单的设置中,可以使用如下所示的SecurityFilterChain内容:

@Profile("dev")
@Configuration(proxyBeanMethods = false)
public class DevProfileSecurityConfiguration {
​
    @Bean
    @Order(Ordered.HIGHEST_PRECEDENCE)
    SecurityFilterChain h2ConsoleSecurityFilterChain(HttpSecurity http) throws Exception {
        http.securityMatcher(PathRequest.toH2Console());
        http.authorizeHttpRequests(yourCustomAuthorization());
        http.csrf((csrf) -> csrf.disable());
        http.headers((headers) -> headers.frameOptions((frame) -> frame.sameOrigin()));
        return http.build();
    }
​
​
}

H2 控制台仅供开发期间使用。在生产中,禁用 CSRF 保护或允许网站使用框架可能会带来严重的安全风险。

当控制台的路径已自定义时,PathRequest.toH2Console()也会返回正确的请求匹配器。

9.1.7. 使用 jOOQ

代码生成

<plugin>
    <groupId>org.jooq</groupId>
    <artifactId>jooq-codegen-maven</artifactId>
    <executions>
        ...
    </executions>
    <dependencies>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>${h2.version}</version>
        </dependency>
    </dependencies>
    <configuration>
        <jdbc>
            <driver>org.h2.Driver</driver>
            <url>jdbc:h2:~/yourdatabase</url>
        </jdbc>
        <generator>
            ...
        </generator>
    </configuration>
</plugin>

使用 DSLContext

jOOQ提供的Fluent API是通过org.jooq.DSLContext接口发起的。Spring Boot 自动将 DSLContext 配置为 Spring Bean 并将其连接到您应用程序的DataSource。要使用DSLContext,您可以注入它,如以下示例所示:

@Component
public class MyBean {
​
    private final DSLContext create;
​
    public MyBean(DSLContext dslContext) {
        this.create = dslContext;
    }
​
​
}

jOOQ 手册倾向于使用名为create的变量来保存DSLContext.

然后,您可以使用DSLContext来构建查询,如以下示例所示:

public List<GregorianCalendar> authorsBornAfter1980() {
    return this.create.selectFrom(AUTHOR)
        .where(AUTHOR.DATE_OF_BIRTH.greaterThan(new GregorianCalendar(1980, 0, 1)))
        .fetch(AUTHOR.DATE_OF_BIRTH);

jOOQ SQL 方言

除非已配置spring.jooq.sql-dialect属性,否则 Spring Boot 会确定用于数据源的 SQL 方言。如果 Spring Boot 无法检测到方言,它会使用DEFAULT.

Spring Boot 只能自动配置开源版本 jOOQ 支持的方言。

定制jOOQ

可以通过定义您自己的DefaultConfigurationCustomizerbean 来实现更高级的自定义,该 bean 将在创建org.jooq.Configuration @Bean时调用. 这优先于自动配置应用的任何内容。

如果您想完全控制 jOOQ 配置,您也可以创建自己的org.jooq.Configuration @Bean。

9.1.8. 使用 R2DBC

ConnectionFactory配置由 spring.r2dbc.*中的外部配置属性控制。例如,您可以在application.properties 中声明以下部分:

spring.r2dbc.url=r2dbc:postgresql://localhost/test
spring.r2dbc.username=dbuser
spring.r2dbc.password=dbpass

您不需要指定驱动程序类名,因为 Spring Boot 从 R2DBC 的连接工厂发现中获取驱动程序。

至少应该提供网址。URL 中指定的信息优先于各个属性,即name、username和password池选项。

要自定义由ConnectionFactory 所创建的连接,即设置您不想(或无法)在中央数据库配置中配置的特定参数,您可以使用ConnectionFactoryOptionsBuilderCustomizer @Bean. 以下示例显示如何手动覆盖数据库端口,而其余选项则取自应用程序配置:

@Configuration(proxyBeanMethods = false)
public class MyR2dbcConfiguration {
​
    @Bean
    public ConnectionFactoryOptionsBuilderCustomizer connectionFactoryPortCustomizer() {
        return (builder) -> builder.option(ConnectionFactoryOptions.PORT, 5432);
    }
​
}

以下示例显示如何设置一些 PostgreSQL 连接选项:

@Configuration(proxyBeanMethods = false)
public class MyPostgresR2dbcConfiguration {
​
    @Bean
    public ConnectionFactoryOptionsBuilderCustomizer postgresCustomizer() {
        Map<String, String> options = new HashMap<>();
        options.put("lock_timeout", "30s");
        options.put("statement_timeout", "60s");
        return (builder) -> builder.option(PostgresqlConnectionFactoryProvider.OPTIONS, options);
    }
​
}

当ConnectionFactorybean 可用时,常规 JDBCDataSource自动配置就会停止。如果您想保留 JDBCDataSource自动配置,并且愿意接受在反应式应用程序中使用阻塞 JDBC API 的风险,请在应用程序中的一个@Configuration类添加@Import(DataSourceAutoConfiguration.class)以重新启用它。

嵌入式数据库支持

<dependency>
    <groupId>io.r2dbc</groupId>
    <artifactId>r2dbc-h2</artifactId>
    <scope>runtime</scope>
</dependency>

如果您在测试中使用此功能,您可能会注意到,无论您使用的应用程序上下文数量如何,整个测试套件都会重复使用同一个数据库。如果您想确保每个上下文都有一个单独的嵌入式数据库,您应该设置spring.r2dbc.generate-unique-name为true。

使用数据库客户端

DatabaseClient bean是自动配置的,您可以将@Autowire其直接添加到您自己的 bean 中,如以下示例所示:

@Component
public class MyBean {
​
    private final DatabaseClient databaseClient;
​
    public MyBean(DatabaseClient databaseClient) {
        this.databaseClient = databaseClient;
    }
​
    // ...
​
}

Spring Data R2DBC 存储库

以下示例显示了典型的 Spring Data 存储库接口定义:

public interface CityRepository extends Repository<City, Long> {
​
    Mono<City> findByNameAndStateAllIgnoringCase(String name, String state);
​
}

请参阅参考资料 了解更多支持的选项。这些是无论如何都有效的标准选项。还可以通过使用各自的前缀(spring.datasource.hikari.* 、spring.datasource.tomcat.*、spring.datasource.dbcp2.*和spring.datasource.oracleucp.*)来微调特定于实现的设置。有关更多详细信息,请参阅您正在使用的连接池实现的文档。

例如,如果您使用,则可以自定义许多其他设置,如以下示例所示:

我们更喜欢的性能和并发性。如果 HikariCP 可用,我们总是选择它。

否则,如果可用,我们将使用它。

我们在这里不过多讨论 JPA 或的细节。您可以遵循指南并阅读和参考文档。

传统上,JPA“实体”类是在persistence.xml文件中指定的。对于 Spring Boot,这个文件不是必需的,而是使用“Entity Scanning”。默认情况下会扫描

您可以使用@EntityScan注释自定义实体扫描位置。请参阅“”操作方法。

存储库是您可以定义来访问数据的接口。JPA 查询是根据您的方法名称自动创建的。例如,CityRepository接口可能声明一个findAllByState(String state)方法来查找给定州的所有城市。

对于更复杂的查询,您可以使用 Spring Data 的注释来注释您的方法。

Spring Data 存储库通常从或接口扩展。如果您使用自动配置,则会搜索存储库。

我们仅仅触及了 Spring Data JPA 的皮毛。有关完整的详细信息,请参阅。

如果可用,JPA 存储库会自动配置为支持典型的 Envers 查询。

有关更多详细信息,请查看。

如果您正在运行 Web 应用程序,Spring Boot 默认情况下会注册以应用“在视图中打开 EntityManager”模式,以允许在 Web 视图中延迟加载。如果您不希望出现这种行为,您应该在您的application.properties将spring.jpa.open-in-view设置为false.

有关 Spring Data JDBC 的完整详细信息,请参阅。

提供了一个,Spring Boot 可以为您自动配置。当满足以下条件时,控制台会自动配置:

您正在使用。

有关和标头更多信息可以在 Spring Security 参考指南中找到。

jOOQ 面向对象查询 ( 的一款流行产品,它从数据库生成 Java 代码,并允许您通过其流畅的 API 构建类型安全的 SQL 查询。商业版和开源版都可以与 Spring Boot 一起使用。

为了使用 jOOQ 类型安全查询,您需要从数据库模式生成 Java 类。中的说明进行操作。如果您使用jooq-codegen-maven插件并且还使用“父 POM”spring-boot-starter-parent,则可以安全地省略该插件的<version>标签。您还可以使用 Spring Boot 定义的版本变量(例如h2.version)来声明插件的数据库依赖项。以下清单显示了一个示例:

反应式关系数据库连接 ( ) 项目为关系数据库带来了反应式编程 API。R2DBC的io.r2dbc.spi.Connection提供了一种使用非阻塞数据库连接的标准方法。连接是通过使用ConnectionFactory提供的,类似于jdbc 中的 DataSource。

“操作方法”部分包括。

与类似,Spring Boot 可以自动配置嵌入式数据库以进行反应式使用。您无需提供任何连接 URL。您只需包含对要使用的嵌入式数据库的构建依赖项,如以下示例所示:

存储库是您可以定义来访问数据的接口。查询是根据您的方法名称自动创建的。例如,CityRepository接口可能声明一个findAllByState(String state)方法来查找给定州下的所有城市。

对于更复杂的查询,您可以使用 Spring Data 的注释来注释您的方法。

Spring Data 存储库通常从或接口扩展。如果您使用自动配置,则会搜索存储库。

我们仅仅触及了 Spring Data R2DBC 的皮毛。有关完整的详细信息,请参阅。

框架
Spring Data
“操作方法”部分
有关如何初始化数据库的部分
H2
HSQL
Derby
DataSourceProperties
实际实施
Tomcat 连接池
HikariCP
Commons DBCP2
Spring Data
spring.io中的
“使用 JPA 访问数据”
Spring Data JPA
Hibernate
自动配置包。
从 Spring 配置中分离 @Entity 定义
Spring Data JPA
Query
Repository
CrudRepository
在自动配置包中
Spring Data JPA 参考文档
Spring Data Envers
Spring Data Envers 参考文档
OpenEntityManagerInViewInterceptor
参考文档
H2 数据库
基于浏览器的控制台
Spring Boot 的开发者工具
CSRF
X-Frame-Options 的
jOOQ ) 是
Data Geekery
您可以按照jOOQ 用户手册
R2DBC
有关如何初始化数据库的部分
JDBC 支持
Spring Data R2DBC
Query
Repository
CrudRepository
在自动配置包中
Spring Data R2DBC 参考文档