数据
1. SQL 数据库
Spring Framework 为使用 SQL 数据库提供了广泛的支持,从直接 JDBC 访问到完整的“对象关系映射”技术,例如 Hibernate。Spring Data 提供了更高级别的功能:直接从接口创建实现,并使用约定从方法名称生成查询。JdbcTemplate
Repository
1.1. 配置 DataSource
Java 的接口提供了一种使用数据库连接的标准方法。
传统上,'DataSource' 使用 a 和一些凭证来建立数据库连接。javax.sql.DataSource
URL
有关更高级的示例,请参阅“操作方法”部分,通常是为了完全控制 DataSource 的配置。 |
1.1.1. 嵌入式数据库支持
使用内存中嵌入式数据库开发应用程序通常很方便。 显然,内存数据库不提供持久存储。 您需要在应用程序启动时填充数据库,并准备好在应用程序结束时丢弃数据。
“操作方法”部分包括有关如何初始化数据库的部分。 |
Spring Boot 可以自动配置嵌入式 H2、HSQL 和 Derby 数据库。
您无需提供任何连接 URL。
您只需包含对要使用的嵌入式数据库的构建依赖项。
如果 Classpath 上有多个嵌入式数据库,请设置 configuration 属性以控制使用哪个数据库。
将该属性设置为禁用嵌入式数据库的自动配置。spring.datasource.embedded-database-connection
none
如果您在测试中使用此功能,您可能会注意到,无论您使用多少个应用程序上下文,整个测试套件都会重用同一个数据库。
如果要确保每个上下文都有一个单独的嵌入式数据库,则应设置为 。 |
例如,典型的 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,则应使用 to 执行此操作。
如果您使用 HSQLDB,则应确保未使用 HSQLDB。
禁用数据库的自动关闭可以让 Spring Boot 控制数据库何时关闭,从而确保在不再需要访问数据库时进行关闭。DB_CLOSE_ON_EXIT=FALSE shutdown=true |
1.1.3. DataSource 配置
DataSource 配置由 中的外部配置属性控制。
例如,您可以在 :spring.datasource.*
application.properties
spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=dbuser
spring.datasource.password=dbpass
spring:
datasource:
url: "jdbc:mysql://localhost/test"
username: "dbuser"
password: "dbpass"
您至少应该通过设置属性来指定 URL。
否则, Spring Boot 会尝试自动配置嵌入式数据库。spring.datasource.url |
Spring Boot 可以从 URL 中推断出大多数数据库的 JDBC 驱动程序类。
如果需要指定特定类,可以使用该属性。spring.datasource.driver-class-name |
要创建池,我们需要能够验证是否有有效的类可用,因此我们在执行任何操作之前都会检查一下。
换句话说,如果你设置了 ,那么该类必须是可加载的。DataSource Driver spring.datasource.driver-class-name=com.mysql.jdbc.Driver |
有关更多支持的选项,请参阅 DataSourceProperties
。
这些是无论实际实现如何都有效的标准选项。
还可以使用各自的前缀 (、 、 和 )微调特定于实现的设置 。
有关更多详细信息,请参阅您正在使用的连接池实现的文档。spring.datasource.hikari.*
spring.datasource.tomcat.*
spring.datasource.dbcp2.*
spring.datasource.oracleucp.*
例如,如果您使用 Tomcat 连接池,则可以自定义许多其他设置,如以下示例所示:
spring.datasource.tomcat.max-wait=10000
spring.datasource.tomcat.max-active=50
spring.datasource.tomcat.test-on-borrow=true
spring:
datasource:
tomcat:
max-wait: 10000
max-active: 50
test-on-borrow: true
这会将池设置为在没有可用连接的情况下等待 10000 毫秒,然后再引发异常,将最大连接数限制为 50 个,并在从池中借用连接之前验证连接。
1.1.4. 支持的连接池
Spring Boot 使用以下算法来选择特定实现:
-
我们更喜欢 HikariCP 的性能和并发性。 如果 HikariCP 可用,我们总是会选择它。
-
否则,如果 Tomcat 池可用,我们将使用它。
DataSource
-
否则,如果 Commons DBCP2 可用,我们就会使用它。
-
如果 HikariCP、Tomcat 和 DBCP2 都不可用,并且 Oracle UCP 可用,则使用它。
如果使用 或 “starters”,则会自动获得对 .spring-boot-starter-jdbc spring-boot-starter-data-jpa HikariCP |
您可以完全绕过该算法,并通过设置属性来指定要使用的连接池。
如果您在 Tomcat 容器中运行应用程序(默认情况下提供),这一点尤其重要。spring.datasource.type
tomcat-jdbc
其他连接池始终可以使用 手动配置。
如果定义自己的 Bean,则不会进行自动配置。
以下连接池由 支持:DataSourceBuilder
DataSource
DataSourceBuilder
-
光CP
-
Tomcat 池
Datasource
-
共享 DBCP2
-
Oracle UCP 和
OracleDataSource
-
Spring 框架的
SimpleDriverDataSource
-
H2 系列
JdbcDataSource
-
PostgreSQL 数据库
PGSimpleDataSource
-
C3P0
1.1.5. 连接到 JNDI 数据源
如果将 Spring Boot 应用程序部署到 Application Server,则可能需要使用 Application Server 的内置功能来配置和管理 DataSource,并使用 JNDI 访问它。
该属性可用作 、 和 属性的替代方法,以便从特定的 JNDI 位置访问 。
例如,以下部分显示了如何访问定义的 JBoss AS :spring.datasource.jndi-name
spring.datasource.url
spring.datasource.username
spring.datasource.password
DataSource
application.properties
DataSource
spring.datasource.jndi-name=java:jboss/datasources/customers
spring:
datasource:
jndi-name: "java:jboss/datasources/customers"
1.2. 使用 JdbcTemplate
Spring 的 和 classes 是自动配置的,你可以将它们直接放入你自己的 bean 中,如以下示例所示:JdbcTemplate
NamedParameterJdbcTemplate
@Autowire
@Component
public class MyBean {
private final JdbcTemplate jdbcTemplate;
public MyBean(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public void doSomething() {
this.jdbcTemplate ...
}
}
@Component
class MyBean(private val jdbcTemplate: JdbcTemplate) {
fun doSomething() {
jdbcTemplate.execute("delete from customer")
}
}
您可以使用属性自定义模板的某些属性,如以下示例所示:spring.jdbc.template.*
spring.jdbc.template.max-rows=500
spring:
jdbc:
template:
max-rows: 500
这会在后台重用相同的实例。
如果定义了多个 并且不存在主要候选 ,则不会自动配置 。NamedParameterJdbcTemplate JdbcTemplate JdbcTemplate NamedParameterJdbcTemplate |
1.3. JPA 和 Spring Data JPA
Java Persistence API 是一种标准技术,允许您将对象 “映射” 到关系数据库。
POM 提供了一种快速入门方法。
它提供以下关键依赖项:spring-boot-starter-data-jpa
-
Hibernate:最流行的 JPA 实现之一。
-
Spring Data JPA:帮助您实施基于 JPA 的存储库。
-
Spring ORM:来自 Spring 框架的核心 ORM 支持。
我们在这里不详细介绍 JPA 或 Spring Data。 您可以按照 spring.io 中的“使用 JPA 访问数据”指南进行操作,并阅读 Spring Data JPA 和 Hibernate 参考文档。 |
1.3.1. 实体类
传统上,JPA “Entity” 类是在文件中指定的。
使用 Spring Boot 时,此文件不是必需的,而是使用 “Entity Scanning” 代替。
默认情况下,将扫描自动配置包。persistence.xml
考虑任何用 、 或 注释的类。
典型的实体类类似于以下示例:@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
}
@Entity
class City : Serializable {
@Id
@GeneratedValue
private val id: Long? = null
@Column(nullable = false)
var name: String? = null
private set
// ... etc
@Column(nullable = false)
var state: String? = null
private set
// ... additional members, often include @OneToMany mappings
protected constructor() {
// no-args constructor required by JPA spec
// this one is protected since it should not be used directly
}
constructor(name: String?, state: String?) {
this.name = name
this.state = state
}
}
您可以使用注释自定义实体扫描位置。
请参阅“howto.html”操作方法。@EntityScan |
1.3.2. Spring Data JPA 存储库
Spring Data JPA 存储库是您可以定义用于访问数据的接口。
JPA 查询是根据您的方法名称自动创建的。
例如,接口可以声明一个方法来查找给定状态中的所有城市。CityRepository
findAllByState(String state)
对于更复杂的查询,您可以使用 Spring Data 的 Query
注释来注释您的方法。
Spring Data 存储库通常从 Repository
或 CrudRepository
接口扩展。
如果使用自动配置,则会在自动配置包中搜索存储库。
您可以使用 自定义位置以查找存储库。@EnableJpaRepositories |
以下示例显示了典型的 Spring Data 存储库接口定义:
public interface CityRepository extends Repository<City, Long> {
Page<City> findAll(Pageable pageable);
City findByNameAndStateAllIgnoringCase(String name, String state);
}
interface CityRepository : Repository<City?, Long?> {
fun findAll(pageable: Pageable?): Page<City?>?
fun findByNameAndStateAllIgnoringCase(name: String?, state: String?): City?
}
Spring Data JPA 存储库支持三种不同的引导模式:default、deferred 和 lazy。
要启用延迟或延迟引导,请分别将属性设置为 或 。
当使用延迟或延迟引导时,自动配置的将使用上下文的 ,如果有,作为引导执行程序。
如果存在多个,则将使用 named 的那个。spring.data.jpa.repositories.bootstrap-mode
deferred
lazy
EntityManagerFactoryBuilder
AsyncTaskExecutor
applicationTaskExecutor
使用延迟或延迟引导时,请确保在应用程序上下文引导阶段之后推迟对 JPA 基础设施的任何访问。
您可以使用 来调用任何需要 JPA 基础设施的初始化。
对于创建为 Spring bean 的 JPA 组件(例如转换器),请使用 延迟依赖项的解析(如果有)。 |
我们只是触及了 Spring Data JPA 的皮毛。 有关完整详细信息,请参阅 Spring Data JPA 参考文档。 |
1.3.3. Spring Data Envers 存储库
如果 Spring Data Envers 可用,则 JPA 存储库将自动配置为支持典型的 Envers 查询。
要使用 Spring Data Envers,请确保您的存储库扩展自以下示例所示:RevisionRepository
public interface CountryRepository extends RevisionRepository<Country, Long, Integer>, Repository<Country, Long> {
Page<Country> findAll(Pageable pageable);
}
interface CountryRepository :
RevisionRepository<Country?, Long?, Int>,
Repository<Country?, Long?> {
fun findAll(pageable: Pageable?): Page<Country?>?
}
有关更多详细信息,请查看 Spring Data Envers 参考文档。 |
1.3.4. 创建和删除 JPA 数据库
默认情况下,只有当您使用嵌入式数据库(H2、HSQL 或 Derby)时,才会自动创建 JPA 数据库。
您可以使用属性显式配置 JPA 设置。
例如,要创建和删除表,您可以将以下行添加到 :spring.jpa.*
application.properties
spring.jpa.hibernate.ddl-auto=create-drop
spring:
jpa:
hibernate.ddl-auto: "create-drop"
Hibernate 自己的内部属性名称(如果你记得更清楚的话)是 .
你可以通过使用来设置它,以及其他 Hibernate 原生属性(在将它们添加到实体管理器之前,前缀会被去除)。
以下行显示了为 Hibernate 设置 JPA 属性的示例:hibernate.hbm2ddl.auto spring.jpa.properties.* |
spring.jpa.properties.hibernate[globally_quoted_identifiers]=true
spring:
jpa:
properties:
hibernate:
"globally_quoted_identifiers": "true"
前面示例中的行将属性的值 of 传递给 Hibernate 实体管理器。true
hibernate.globally_quoted_identifiers
默认情况下,DDL 执行(或验证)会延迟到 开始。
还有一个标志,但如果 Hibernate 自动配置处于活动状态,则不会使用它,因为设置更加细粒度。ApplicationContext
spring.jpa.generate-ddl
ddl-auto
1.3.5. 在 View 中打开 EntityManager
如果你正在运行一个 Web 应用程序, Spring Boot 默认注册OpenEntityManagerInViewInterceptor
以应用“在视图中打开EntityManager”模式,以允许在 Web 视图中进行延迟加载。
如果您不希望此行为,则应在 .spring.jpa.open-in-view
false
application.properties
1.4. Spring Data JDBC
Spring Data 包括对 JDBC 的存储库支持,并将为 上的方法自动生成 SQL。
对于更高级的查询,提供了注释。CrudRepository
@Query
当必要的依赖项位于 Classpath 上时, Spring Boot 将自动配置 Spring Data 的 JDBC 存储库。
它们可以通过对 的单个依赖项添加到您的项目中。
如有必要,您可以通过将 Comments 或子类添加到您的应用程序来控制 Spring Data JDBC 的配置。spring-boot-starter-data-jdbc
@EnableJdbcRepositories
AbstractJdbcConfiguration
有关 Spring Data JDBC 的完整详细信息,请参阅参考文档。 |
1.5. 使用 H2 的 Web 控制台
-
您正在开发基于 servlet 的 Web 应用程序。
-
com.h2database:h2
位于 Classpath 上。 -
您正在使用 Spring Boot 的开发人员工具。
如果您不使用 Spring Boot 的开发人员工具,但仍希望使用 H2 的控制台,则可以配置值为 .spring.h2.console.enabled true |
H2 控制台仅用于开发期间,因此应注意确保未在生产环境中将其设置为。spring.h2.console.enabled true |
1.5.2. 在受保护的应用程序中访问 H2 控制台
H2 控制台使用框架,因为它仅用于开发,所以不实施 CSRF 保护措施。 如果您的应用程序使用 Spring Security,则需要将其配置为
-
对针对控制台的请求禁用 CSRF 保护,
-
将 Header (标头) 设置为 On Responses (响应时)。
X-Frame-Options
SAMEORIGIN
有关 CSRF 和标头 X-Frame-Options 的更多信息,请参见 Spring Security Reference Guide。
在简单的设置中,可以使用如下所示的设置:SecurityFilterChain
@Profile("dev")
@Configuration(proxyBeanMethods = false)
public class DevProfileSecurityConfiguration {
@Bean
@Order(Ordered.HIGHEST_PRECEDENCE)
SecurityFilterChain h2ConsoleSecurityFilterChain(HttpSecurity http) throws Exception {
http.requestMatcher(PathRequest.toH2Console());
http.authorizeRequests(yourCustomAuthorization());
http.csrf((csrf) -> csrf.disable());
http.headers((headers) -> headers.frameOptions().sameOrigin());
return http.build();
}
}
@Profile("dev")
@Configuration(proxyBeanMethods = false)
class DevProfileSecurityConfiguration {
@Bean
@Order(Ordered.HIGHEST_PRECEDENCE)
fun h2ConsoleSecurityFilterChain(http: HttpSecurity): SecurityFilterChain {
return http.authorizeHttpRequests(yourCustomAuthorization())
.csrf().disable()
.headers().frameOptions().sameOrigin().and()
.build()
}
}
H2 控制台仅用于开发期间。 在生产环境中,关闭 CSRF 保护或允许 Web 站点框架可能会造成严重的安全风险。 |
PathRequest.toH2Console() 当控制台的路径已自定义时,也会返回正确的 Request Matcher。 |
1.6. 使用 jOOQ
jOOQ 面向对象查询 (jOOQ) 是 Data Geekery 的一款热门产品,它从您的数据库生成 Java 代码,并允许您通过其 Fluent API 构建类型安全的 SQL 查询。 商业版和开源版都可以与 Spring Boot 一起使用。
1.6.1. 代码生成
为了使用 jOOQ 类型安全的查询,您需要从数据库架构生成 Java 类。
您可以按照 jOOQ 用户手册中的说明进行操作。
如果您使用该插件,并且还使用了 “parent POM”,则可以安全地省略该插件的标签。
您还可以使用 Spring Boot 定义的版本变量(例如 )来声明插件的数据库依赖项。
下面的清单显示了一个示例:jooq-codegen-maven
spring-boot-starter-parent
<version>
h2.version
<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>
1.6.2. 使用 DSLContext
jOOQ 提供的 Fluent API 是通过接口启动的。
Spring Boot 自动将 a 配置为 Spring Bean 并将其连接到您的 application 。
要使用 ,您可以注入它,如以下示例所示:org.jooq.DSLContext
DSLContext
DataSource
DSLContext
@Component
public class MyBean {
private final DSLContext create;
public MyBean(DSLContext dslContext) {
this.create = dslContext;
}
}
@Component
class MyBean(private val 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);
fun authorsBornAfter1980(): List<GregorianCalendar> {
return create.selectFrom<Tables.TAuthorRecord>(Tables.AUTHOR)
.where(Tables.AUTHOR?.DATE_OF_BIRTH?.greaterThan(GregorianCalendar(1980, 0, 1)))
.fetch(Tables.AUTHOR?.DATE_OF_BIRTH)
}
1.7. 使用 R2DBC
反应式关系数据库连接 (R2DBC) 项目为关系数据库带来了反应式编程 API。
R2DBC 提供了一种使用非阻塞数据库连接的标准方法。
通过使用 来提供连接,类似于 jdbc 的 a。io.r2dbc.spi.Connection
ConnectionFactory
DataSource
ConnectionFactory
配置由 中的外部配置属性控制。
例如,您可以在 :spring.r2dbc.*
application.properties
spring.r2dbc.url=r2dbc:postgresql://localhost/test
spring.r2dbc.username=dbuser
spring.r2dbc.password=dbpass
spring:
r2dbc:
url: "r2dbc:postgresql://localhost/test"
username: "dbuser"
password: "dbpass"
你不需要指定驱动程序类名,因为 Spring Boot 从 R2DBC 的 Connection Factory 发现中获取驱动程序。 |
至少应该提供 url。
URL 中指定的信息优先于单个属性,即 、 和 pooling 选项。name username password |
“操作方法”部分包括有关如何初始化数据库的部分。 |
要自定义由 创建的连接,即设置您不希望(或不能)在中央数据库配置中配置的特定参数,您可以使用 .
以下示例显示了如何手动覆盖数据库端口,而其余选项则从应用程序配置中获取:ConnectionFactory
ConnectionFactoryOptionsBuilderCustomizer
@Bean
@Configuration(proxyBeanMethods = false)
public class MyR2dbcConfiguration {
@Bean
public ConnectionFactoryOptionsBuilderCustomizer connectionFactoryPortCustomizer() {
return (builder) -> builder.option(ConnectionFactoryOptions.PORT, 5432);
}
}
@Configuration(proxyBeanMethods = false)
class MyR2dbcConfiguration {
@Bean
fun connectionFactoryPortCustomizer(): ConnectionFactoryOptionsBuilderCustomizer {
return ConnectionFactoryOptionsBuilderCustomizer { 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);
}
}
@Configuration(proxyBeanMethods = false)
class MyPostgresR2dbcConfiguration {
@Bean
fun postgresCustomizer(): ConnectionFactoryOptionsBuilderCustomizer {
val options: MutableMap<String, String> = HashMap()
options["lock_timeout"] = "30s"
options["statement_timeout"] = "60s"
return ConnectionFactoryOptionsBuilderCustomizer { builder ->
builder.option(PostgresqlConnectionFactoryProvider.OPTIONS, options)
}
}
}
当 Bean 可用时,常规 JDBC 自动配置将退出。
如果您想保留 JDBC 自动配置,并且愿意承担在响应式应用程序中使用阻塞 JDBC API 的风险,请在应用程序中添加一个类以重新启用它。ConnectionFactory
DataSource
DataSource
@Import(DataSourceAutoConfiguration.class)
@Configuration
1.7.1. 嵌入式数据库支持
与 JDBC 支持类似, Spring Boot 可以自动配置嵌入式数据库以进行反应式使用。 您无需提供任何连接 URL。 您只需包含要使用的嵌入式数据库的构建依赖项,如以下示例所示:
<dependency>
<groupId>io.r2dbc</groupId>
<artifactId>r2dbc-h2</artifactId>
<scope>runtime</scope>
</dependency>
如果您在测试中使用此功能,您可能会注意到,无论您使用多少个应用程序上下文,整个测试套件都会重用同一个数据库。
如果要确保每个上下文都有一个单独的嵌入式数据库,则应设置为 。 |
1.7.2. 使用 DatabaseClient
bean 是自动配置的,你可以直接将其放入自己的 bean 中,如以下示例所示:DatabaseClient
@Autowire
@Component
public class MyBean {
private final DatabaseClient databaseClient;
public MyBean(DatabaseClient databaseClient) {
this.databaseClient = databaseClient;
}
}
@Component
class MyBean(private val databaseClient: DatabaseClient) {
}
1.7.3. Spring Data R2DBC 存储库
Spring Data R2DBC 存储库是您可以定义以访问数据的接口。
查询是根据您的方法名称自动创建的。
例如,接口可以声明一个方法来查找给定状态中的所有城市。CityRepository
findAllByState(String state)
对于更复杂的查询,您可以使用 Spring Data 的 Query
注释来注释您的方法。
Spring Data 存储库通常从 Repository
或 CrudRepository
接口扩展。
如果使用自动配置,则会在自动配置包中搜索存储库。
以下示例显示了典型的 Spring Data 存储库接口定义:
public interface CityRepository extends Repository<City, Long> {
Mono<City> findByNameAndStateAllIgnoringCase(String name, String state);
}
interface CityRepository : Repository<City?, Long?> {
fun findByNameAndStateAllIgnoringCase(name: String?, state: String?): Mono<City?>?
}
我们只是触及了 Spring Data R2DBC 的皮毛。有关完整详细信息,请参阅 Spring Data R2DBC 参考文档。 |
2. 使用 NoSQL 技术
Spring Data 提供了其他项目,可帮助您访问各种 NoSQL 技术,包括:
其中,Spring Boot 为 Cassandra、Couchbase、Elasticsearch、LDAP、MongoDB、Neo4J 和 Redis 提供了自动配置。 此外,Spring Boot for Apache Geode 还提供 Apache Geode 的自动配置。 您可以使用其他项目,但必须自己配置它们。 请参阅 spring.io/projects/spring-data 中的相应参考文档。
Spring Boot 还为 InfluxDB 和 Solr 客户端提供了自动配置。
2.1. Redis
Redis 是一个缓存、消息代理和功能丰富的键值存储。 Spring Boot 为 Lettuce 和 Jedis 客户端库以及 Spring Data Redis 提供的抽象提供了基本的自动配置。
有一个 “Starter” 用于以方便的方式收集依赖项。
默认情况下,它使用 Lettuce。
该Starters可以处理传统和响应式应用程序。spring-boot-starter-data-redis
我们还提供了一个 “Starter” ,以便与其他具有反应式支持的 store 保持一致。spring-boot-starter-data-redis-reactive |
2.1.1. 连接到 Redis
您可以像注入任何其他 Spring Bean 一样注入自动配置的 、 或 vanilla 实例。
下面的清单显示了这种 bean 的一个示例:RedisConnectionFactory
StringRedisTemplate
RedisTemplate
@Component
public class MyBean {
private final StringRedisTemplate template;
public MyBean(StringRedisTemplate template) {
this.template = template;
}
}
@Component
class MyBean(private val template: StringRedisTemplate) {
}
默认情况下,实例尝试连接到 位于 的 Redis 服务器。
您可以使用 properties 指定自定义连接详细信息,如以下示例所示:localhost:6379
spring.redis.*
spring.redis.host=localhost
spring.redis.port=6379
spring.redis.database=0
spring.redis.username=user
spring.redis.password=secret
spring:
redis:
host: "localhost"
port: 6379
database: 0
username: "user"
password: "secret"
您还可以注册任意数量的 bean 来实现更高级的自定义。 也可以使用 进行自定义。
如果您使用 Jedis,也可以使用。
或者,您可以注册 , 类型的 bean 或完全控制配置。LettuceClientConfigurationBuilderCustomizer ClientResources ClientResourcesBuilderCustomizer JedisClientConfigurationBuilderCustomizer RedisStandaloneConfiguration RedisSentinelConfiguration RedisClusterConfiguration |
如果添加自己的任何自动配置类型,它将替换默认值(除非 ,当排除基于 bean 名称 ,而不是其类型时)。@Bean
RedisTemplate
redisTemplate
默认情况下,如果池连接工厂在 Classpath 上,则会自动配置。commons-pool2
2.2. MongoDB 数据库
MongoDB 是一个开源 NoSQL 文档数据库,它使用类似 JSON 的架构,而不是传统的基于表的关系数据。
Spring Boot 为使用 MongoDB 提供了多种便利,包括“Starters”。spring-boot-starter-data-mongodb
spring-boot-starter-data-mongodb-reactive
2.2.1. 连接到 MongoDB 数据库
要访问 MongoDB 数据库,您可以注入自动配置的 .
默认情况下,实例尝试连接到 位于 的 MongoDB 服务器。
以下示例显示如何连接到 MongoDB 数据库:org.springframework.data.mongodb.MongoDatabaseFactory
mongodb://localhost/test
@Component
public class MyBean {
private final MongoDatabaseFactory mongo;
public MyBean(MongoDatabaseFactory mongo) {
this.mongo = mongo;
}
}
@Component
class MyBean(private val mongo: MongoDatabaseFactory) {
}
如果您定义了自己的 ,它将用于自动配置合适的 .MongoClient
MongoDatabaseFactory
auto-configured 是使用 bean 创建的。
如果您已定义自己的 ,则无需修改即可使用它,并且将忽略这些属性。
否则,将自动配置 a 并将应用属性。
在任何一种情况下,您都可以声明一个或多个 bean 来微调配置。
每个都将按顺序调用,其中 用于构建 .MongoClient
MongoClientSettings
MongoClientSettings
spring.data.mongodb
MongoClientSettings
spring.data.mongodb
MongoClientSettingsBuilderCustomizer
MongoClientSettings
MongoClientSettings.Builder
MongoClientSettings
您可以设置该属性以更改 URL 并配置其他设置,例如副本集,如以下示例所示:spring.data.mongodb.uri
spring.data.mongodb.uri=mongodb://user:[email protected]:12345,mongo2.example.com:23456/test
spring:
data:
mongodb:
uri: "mongodb://user:[email protected]:12345,mongo2.example.com:23456/test"
或者,您可以使用 discrete 属性指定连接详细信息。
例如,您可以在 :application.properties
spring.data.mongodb.host=mongoserver.example.com
spring.data.mongodb.port=27017
spring.data.mongodb.database=test
spring.data.mongodb.username=user
spring.data.mongodb.password=secret
spring:
data:
mongodb:
host: "mongoserver.example.com"
port: 27017
database: "test"
username: "user"
password: "secret"
如果未指定,则使用默认值 of。
您可以从前面显示的示例中删除此行。spring.data.mongodb.port 27017 |
如果您不使用 Spring Data MongoDB,则可以注入 bean 而不是使用 。
如果要完全控制建立 MongoDB 连接,还可以声明自己的 bean 或 bean。MongoClient MongoDatabaseFactory MongoDatabaseFactory MongoClient |
如果您使用的是反应式驱动程序,则 SSL 需要 Netty。 如果 Netty 可用并且要使用的工厂尚未自定义,则自动配置会自动配置此工厂。 |
2.2.2. MongoTemplate
Spring Data MongoDB 提供了一个 MongoTemplate
类,该类在设计上与 Spring 的类非常相似。
与Spring Boot一样,Spring Boot 会自动配置一个 bean 以注入模板,如下所示:JdbcTemplate
JdbcTemplate
@Component
public class MyBean {
private final MongoTemplate mongoTemplate;
public MyBean(MongoTemplate mongoTemplate) {
this.mongoTemplate = mongoTemplate;
}
}
@Component
class MyBean(private val mongoTemplate: MongoTemplate) {
}
有关完整详细信息,请参阅 MongoOperations
Javadoc。
2.2.3. Spring Data MongoDB 存储库
Spring Data 包括对 MongoDB 的存储库支持。 与前面讨论的 JPA 存储库一样,基本原则是查询是根据方法名称自动构造的。
事实上,Spring Data JPA 和 Spring Data MongoDB 共享相同的通用基础设施。
您可以采用前面的 JPA 示例,假设它现在是MongoDB数据类而不是 JPA,它的工作方式相同,如以下示例所示:City
@Entity
public interface CityRepository extends Repository<City, Long> {
Page<City> findAll(Pageable pageable);
City findByNameAndStateAllIgnoringCase(String name, String state);
}
interface CityRepository :
Repository<City?, Long?> {
fun findAll(pageable: Pageable?): Page<City?>?
fun findByNameAndStateAllIgnoringCase(name: String?, state: String?): City?
}
通过扫描找到存储库和文档。
默认情况下,将扫描自动配置包。
您可以分别使用 和 自定义位置以查找存储库和文档。@EnableMongoRepositories
@EntityScan
有关 Spring Data MongoDB 的完整详细信息,包括其丰富的对象映射技术,请参阅其参考文档。 |
2.2.4. 嵌入式 Mongo
Spring Boot 为 Embedded Mongo 提供自动配置。
要在 Spring Boot 应用程序中使用它,请添加依赖项并设置该属性以匹配应用程序将在生产中使用的 MongoDB 版本。de.flapdoodle.embed:de.flapdoodle.embed.mongo
spring.mongodb.embedded.version
默认下载配置允许访问 Embedded Mongo 的 Version 类中列出的大多数版本以及其他一些版本。
配置无法访问的版本将导致在尝试下载服务器时出错。
可以通过定义适当配置的 bean 来纠正此类错误。DownloadConfigBuilderCustomizer |
可以通过设置属性来配置 Mongo 侦听的端口。
要使用随机分配的空闲端口,请使用值 0。
创建者会自动配置为使用随机分配的端口。spring.data.mongodb.port
MongoClient
MongoAutoConfiguration
如果不配置自定义端口,则嵌入式支持默认使用随机端口(而不是 27017)。 |
如果 Classpath 上有 SLF4J,则 Mongo 生成的输出将自动路由到名为 .org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongo
您可以声明自己的 和 bean 来控制 Mongo 实例的配置和日志记录路由。
可以通过声明 bean 来自定义下载配置。IMongodConfig
IRuntimeConfig
DownloadConfigBuilderCustomizer
2.3. Neo4j
Neo4j 是一个开源的 NoSQL 图形数据库,它使用由第一类关系连接的节点的丰富数据模型,与传统的 RDBMS 方法相比,它更适合连接的大数据。
Spring Boot 为使用 Neo4j 提供了多种便利,包括“Starter”。spring-boot-starter-data-neo4j
2.3.1. 连接到 Neo4j 数据库
要访问 Neo4j 服务器,您可以注入自动配置的 .
默认情况下,实例尝试使用 Bolt 协议连接到 Neo4j 服务器。
下面的示例展示了如何注入一个 Neo4j,它允许你访问一个 :org.neo4j.driver.Driver
localhost:7687
Driver
Session
@Component
public class MyBean {
private final Driver driver;
public MyBean(Driver driver) {
this.driver = driver;
}
}
@Component
class MyBean(private val driver: Driver) {
}
您可以使用属性配置驱动程序的各个方面。
以下示例显示如何配置要使用的 uri 和凭证:spring.neo4j.*
spring.neo4j.uri=bolt://my-server:7687
spring.neo4j.authentication.username=neo4j
spring.neo4j.authentication.password=secret
spring:
neo4j:
uri: "bolt://my-server:7687"
authentication:
username: "neo4j"
password: "secret"
自动配置的是使用 创建的。
要微调其配置,请声明一个或多个 bean。
每个都将按顺序调用,其中 用于构建 .Driver
ConfigBuilder
ConfigBuilderCustomizer
ConfigBuilder
Driver
2.3.2. Spring Data Neo4j 存储库
Spring Data 包括对 Neo4j 的存储库支持。 有关 Spring Data Neo4j 的完整详细信息,请参阅参考文档。
与许多其他 Spring Data 模块一样,Spring Data Neo4j 与 Spring Data JPA 共享公共基础设施。
你可以采用前面的 JPA 示例,并将其定义为 Spring Data Neo4j 而不是 JPA,并且存储库抽象的工作方式相同,如以下示例所示:City
@Node
@Entity
public interface CityRepository extends Neo4jRepository<City, Long> {
Optional<City> findOneByNameAndState(String name, String state);
}
interface CityRepository : Neo4jRepository<City?, Long?> {
fun findOneByNameAndState(name: String?, state: String?): Optional<City?>?
}
“Starter” 启用存储库支持以及事务管理。
Spring Boot 使用 or bean 支持经典和反应式 Neo4j 存储库。
当 Project Reactor 在 Classpath 上可用时,反应式样式也会自动配置。spring-boot-starter-data-neo4j
Neo4jTemplate
ReactiveNeo4jTemplate
通过扫描找到存储库和实体。
默认情况下,将扫描自动配置包。
您可以分别使用 和 自定义位置以查找存储库和实体。@EnableNeo4jRepositories
@EntityScan
在使用 reactive 样式的应用程序中,a 不是自动配置的。
要启用事务管理,必须在您的配置中定义以下 bean: Java
Kotlin
|
2.4. Solr
Apache Solr 是一个搜索引擎。 Spring Boot 为 Solr 5 客户端库提供了基本的自动配置。
2.4.1. 连接到 Solr
您可以像注入任何其他 Spring bean 一样注入自动配置的实例。
默认情况下,实例尝试连接到 位于 的服务器。
下面的示例展示了如何注入 Solr Bean:SolrClient
localhost:8983/solr
@Component
public class MyBean {
private final SolrClient solr;
public MyBean(SolrClient solr) {
this.solr = solr;
}
}
@Component
class MyBean(private val solr: SolrClient) {
}
如果添加自己的 type ,它将替换 default。@Bean
SolrClient
2.5. Elasticsearch
Elasticsearch 是一个开源的分布式 RESTful 搜索和分析引擎。 Spring Boot 为 Elasticsearch 客户端提供了基本的自动配置。
Spring Boot 支持多个客户端:
-
官方的 Java“低级”和“高级”REST 客户端
-
由 Spring Data Elasticsearch 提供
ReactiveElasticsearchClient
Spring Boot 提供了一个专用的 “Starter” 。spring-boot-starter-data-elasticsearch
2.5.1. 使用 REST 客户端连接到 Elasticsearch
Elasticsearch 提供了两个不同的 REST 客户端,您可以使用它们来查询集群:模块中的低级客户端和模块中的高级客户端。
此外, Spring Boot 还从模块中基于 Spring Framework 的 为反应式 Client 端提供支持。
默认情况下,客户端将以 为目标。
您可以使用 properties 来进一步调整客户端的配置方式,如以下示例所示:org.elasticsearch.client:elasticsearch-rest-client
org.elasticsearch.client:elasticsearch-high-level-client
WebClient
org.springframework.data:spring-data-elasticsearch
localhost:9200
spring.elasticsearch.*
spring.elasticsearch.uris=https://search.example.com:9200
spring.elasticsearch.socket-timeout=10s
spring.elasticsearch.username=user
spring.elasticsearch.password=secret
spring:
elasticsearch:
uris: "https://search.example.com:9200"
socket-timeout: "10s"
username: "user"
password: "secret"
使用 RestClient 连接到 Elasticsearch
如果你在 Classpath 上,Spring Boot 将自动配置并注册一个 bean。
如果你在 Classpath 上,一个 bean 也将被自动配置。
在 Elasticsearch 弃用 之后,其自动配置已被弃用,并将在未来版本中删除。
除了前面描述的属性之外,要微调 和 ,您可以注册任意数量的 bean 来实现更高级的自定义。
要完全控制客户端的配置,请定义一个 bean。elasticsearch-rest-client
RestClient
elasticsearch-rest-high-level-client
RestHighLevelClient
RestHighLevelClient
RestClient
RestHighLevelClient
RestClientBuilderCustomizer
RestClientBuilder
此外,如果 在 Classpath 上,则 a 会自动配置为从正在运行的 Elasticsearch 集群中自动发现节点并在 bean 上设置它们。
您可以进一步调整配置方式,如以下示例所示:elasticsearch-rest-client-sniffer
Sniffer
RestClient
Sniffer
spring.elasticsearch.restclient.sniffer.interval=10m
spring.elasticsearch.restclient.sniffer.delay-after-failure=30s
spring:
elasticsearch:
restclient:
sniffer:
interval: "10m"
delay-after-failure: "30s"
使用 ReactiveElasticsearchClient 连接到 Elasticsearch
Spring Data Elasticsearch 用于以反应方式查询 Elasticsearch 实例。
它是建立在 WebFlux 之上的,因此 和 dependencies 都有助于启用此支持。ReactiveElasticsearchClient
WebClient
spring-boot-starter-elasticsearch
spring-boot-starter-webflux
默认情况下,Spring Boot 将自动配置并注册一个 .
除了前面描述的属性之外,这些属性还可用于配置特定于反应式的设置,如以下示例所示:ReactiveElasticsearchClient
spring.elasticsearch.webclient.*
spring.elasticsearch.webclient.max-in-memory-size=1MB
spring:
elasticsearch:
webclient:
max-in-memory-size: "1MB"
如果和spring.elasticsearch.webclient.
配置属性不够,并且您希望完全控制 Client 端配置,则可以注册自定义 bean。spring.elasticsearch.
ClientConfiguration
2.5.2. 使用 Spring Data 连接到 Elasticsearch
要连接到 Elasticsearch,必须定义一个 Bean,
由 Spring Boot 自动配置或由应用程序手动提供(请参阅前面的部分)。
有了这个配置,就可以像任何其他 Spring bean 一样注入 an,
如以下示例所示:RestHighLevelClient
ElasticsearchRestTemplate
@Component
public class MyBean {
private final ElasticsearchRestTemplate template;
public MyBean(ElasticsearchRestTemplate template) {
this.template = template;
}
}
@Component
class MyBean(private val template: ElasticsearchRestTemplate) {
}
在存在使用(通常)所需的依赖项的情况下,Spring Boot 还可以自动配置ReactiveElasticsearchClient和作为 bean。
它们是其他 REST 客户端的反应式等效项。spring-data-elasticsearch
WebClient
spring-boot-starter-webflux
ReactiveElasticsearchTemplate
2.5.3. Spring Data Elasticsearch 存储库
Spring Data 包括对 Elasticsearch 的存储库支持。 与前面讨论的 JPA 存储库一样,基本原则是根据方法名称自动为您构建查询。
事实上,Spring Data JPA 和 Spring Data Elasticsearch 共享相同的通用基础架构。
您可以采用前面的 JPA 示例,假设它现在是 Elasticsearch 类而不是 JPA,它的工作方式相同。City
@Document
@Entity
通过扫描找到存储库和文档。
默认情况下,将扫描自动配置包。
您可以分别使用 和 自定义位置以查找存储库和文档。@EnableElasticsearchRepositories
@EntityScan
有关 Spring Data Elasticsearch 的完整详细信息,请参阅参考文档。 |
Spring Boot 使用 or bean 支持经典和反应式 Elasticsearch 存储库。
如果存在所需的依赖项,这些 bean 很可能是由 Spring Boot 自动配置的。ElasticsearchRestTemplate
ReactiveElasticsearchTemplate
如果您希望使用自己的模板来支持 Elasticsearch 存储库,则可以添加自己的 或 ,只要它名为 .
这同样适用于 和 ,具有 bean 名称。ElasticsearchRestTemplate
ElasticsearchOperations
@Bean
"elasticsearchTemplate"
ReactiveElasticsearchTemplate
ReactiveElasticsearchOperations
"reactiveElasticsearchTemplate"
您可以选择使用以下属性禁用存储库支持:
spring.data.elasticsearch.repositories.enabled=false
spring:
data:
elasticsearch:
repositories:
enabled: false
2.6. Cassandra
Cassandra 是一个开源的分布式数据库管理系统,旨在处理跨许多商用服务器的大量数据。
Spring Boot 为 Cassandra 提供了自动配置,以及 Spring Data Cassandra 提供的抽象。
有一个 “Starter” 用于以方便的方式收集依赖项。spring-boot-starter-data-cassandra
2.6.1. 连接到 Cassandra
您可以像注入任何其他 Spring Bean 一样注入自动配置的实例或 Cassandra 实例。
这些属性可用于自定义连接。
通常,您需要提供 和 local datacenter 名称,如以下示例所示:CassandraTemplate
CqlSession
spring.data.cassandra.*
keyspace-name
contact-points
spring.data.cassandra.keyspace-name=mykeyspace
spring.data.cassandra.contact-points=cassandrahost1:9042,cassandrahost2:9042
spring.data.cassandra.local-datacenter=datacenter1
spring:
data:
cassandra:
keyspace-name: "mykeyspace"
contact-points: "cassandrahost1:9042,cassandrahost2:9042"
local-datacenter: "datacenter1"
如果所有联系点的端口都相同,则可以使用快捷方式,并且仅指定主机名,如以下示例所示:
spring.data.cassandra.keyspace-name=mykeyspace
spring.data.cassandra.contact-points=cassandrahost1,cassandrahost2
spring.data.cassandra.local-datacenter=datacenter1
spring:
data:
cassandra:
keyspace-name: "mykeyspace"
contact-points: "cassandrahost1,cassandrahost2"
local-datacenter: "datacenter1"
这两个示例与默认为 的端口相同。
如果需要配置端口,请使用 。9042 spring.data.cassandra.port |
Cassandra 驱动程序有自己的配置基础结构,该基础结构在 Classpath 的根目录中加载 。 默认情况下,Spring Boot 不会查找此类文件,但可以使用 .
如果配置文件中同时存在属性,则值 in 优先。 对于更高级的驱动程序自定义,您可以注册任意数量的实现 bean 。
可以使用 . |
如果你用来创建多个 bean,请记住 builder 是可变的,所以确保为每个会话注入一个新的副本。CqlSessionBuilder CqlSession |
下面的代码清单显示了如何注入 Cassandra bean:
@Component
public class MyBean {
private final CassandraTemplate template;
public MyBean(CassandraTemplate template) {
this.template = template;
}
}
@Component
class MyBean(private val template: CassandraTemplate) {
}
如果添加自己的 type ,它将替换 default。@Bean
CassandraTemplate
2.7. Couchbase
Couchbase 是一个开源、分布式、多模型、面向文档的 NoSQL 数据库,针对交互式应用程序进行了优化。
Spring Boot 为 Couchbase 提供了自动配置,并且 Spring Data Couchbase 提供了它之上的抽象。
有 和 “Starters” 用于以方便的方式收集依赖项。spring-boot-starter-data-couchbase
spring-boot-starter-data-couchbase-reactive
2.7.1. 连接到 Couchbase
您可以通过添加 Couchbase SDK 和一些配置来获得 A。
这些属性可用于自定义连接。
通常,您需要提供连接字符串、用户名和密码,如以下示例所示:Cluster
spring.couchbase.*
spring.couchbase.connection-string=couchbase://192.168.1.123
spring.couchbase.username=user
spring.couchbase.password=secret
spring:
couchbase:
connection-string: "couchbase://192.168.1.123"
username: "user"
password: "secret"
还可以自定义某些设置。
例如,以下配置更改了用于打开新 API 并启用 SSL 支持的超时:ClusterEnvironment
Bucket
spring.couchbase.env.timeouts.connect=3s
spring.couchbase.env.ssl.key-store=/location/of/keystore.jks
spring.couchbase.env.ssl.key-store-password=secret
spring:
couchbase:
env:
timeouts:
connect: "3s"
ssl:
key-store: "/location/of/keystore.jks"
key-store-password: "secret"
检查属性以了解更多详细信息。
为了获得更多控制,可以使用一个或多个 bean。spring.couchbase.env.* ClusterEnvironmentBuilderCustomizer |
2.7.2. Spring Data Couchbase 存储库
Spring Data 包括对 Couchbase 的存储库支持。
通过扫描找到存储库和文档。
默认情况下,将扫描自动配置包。
您可以分别使用 和 自定义位置以查找存储库和文档。@EnableCouchbaseRepositories
@EntityScan
有关 Spring Data Couchbase 的完整详细信息,请参阅参考文档。
只要 Bean 可用,就可以像使用任何其他 Spring Bean 一样注入自动配置的实例。
如上所述,当 a 可用并且已指定存储桶名称时,会发生这种情况:CouchbaseTemplate
CouchbaseClientFactory
Cluster
spring.data.couchbase.bucket-name=my-bucket
spring:
data:
couchbase:
bucket-name: "my-bucket"
以下示例展示了如何注入 bean:CouchbaseTemplate
@Component
public class MyBean {
private final CouchbaseTemplate template;
public MyBean(CouchbaseTemplate template) {
this.template = template;
}
}
@Component
class MyBean(private val template: CouchbaseTemplate) {
}
您可以在自己的配置中定义一些 bean 来覆盖 auto-configuration 提供的 bean:
-
名称为 .
CouchbaseMappingContext
@Bean
couchbaseMappingContext
-
名称为 .
CustomConversions
@Bean
couchbaseCustomConversions
-
名称为 .
CouchbaseTemplate
@Bean
couchbaseTemplate
为避免在您自己的配置中对这些名称进行硬编码,您可以重用 Spring Data Couchbase 提供的。
例如,您可以自定义要使用的转换器,如下所示:BeanNames
@Configuration(proxyBeanMethods = false)
public class MyCouchbaseConfiguration {
@Bean(BeanNames.COUCHBASE_CUSTOM_CONVERSIONS)
public CouchbaseCustomConversions myCustomConversions() {
return new CouchbaseCustomConversions(Arrays.asList(new MyConverter()));
}
}
@Configuration(proxyBeanMethods = false)
class MyCouchbaseConfiguration {
@Bean(BeanNames.COUCHBASE_CUSTOM_CONVERSIONS)
fun myCustomConversions(): CouchbaseCustomConversions {
return CouchbaseCustomConversions(Arrays.asList(MyConverter()))
}
}
2.8. LDAP 协议
LDAP(轻量级目录访问协议)是一种开放的、供应商中立的行业标准应用协议,用于通过 IP 网络访问和维护分布式目录信息服务。 Spring Boot 为任何兼容的 LDAP 服务器提供自动配置,并支持来自 UnboundID 的嵌入式内存 LDAP 服务器。
LDAP 抽象由 Spring Data LDAP 提供。
有一个 “Starter” 用于以方便的方式收集依赖项。spring-boot-starter-data-ldap
2.8.1. 连接到 LDAP 服务器
要连接到 LDAP 服务器,请确保声明对“Starter”的依赖项,或者在 application.properties 中声明服务器的 URL,如以下示例所示:spring-boot-starter-data-ldap
spring-ldap-core
spring.ldap.urls=ldap://myserver:1235
spring.ldap.username=admin
spring.ldap.password=secret
spring:
ldap:
urls: "ldap://myserver:1235"
username: "admin"
password: "secret"
如果需要自定义连接设置,可以使用 和 属性。spring.ldap.base
spring.ldap.base-environment
An 根据这些设置进行自动配置。
如果 bean 可用,则它与 auto-configured 相关联。
如果需要自定义它,例如使用 ,您仍然可以注入自动配置的 .
确保标记您的自定义 as,以便自动配置的 AUS 使用它。LdapContextSource
DirContextAuthenticationStrategy
LdapContextSource
PooledContextSource
LdapContextSource
ContextSource
@Primary
LdapTemplate
2.8.2. Spring Data LDAP 存储库
Spring Data 包括对 LDAP 的存储库支持。
通过扫描找到存储库和文档。
默认情况下,将扫描自动配置包。
您可以分别使用 和 自定义位置以查找存储库和文档。@EnableLdapRepositories
@EntityScan
有关 Spring Data LDAP 的完整详细信息,请参阅参考文档。
你也可以像注入任何其他 Spring Bean 一样注入自动配置的实例,如以下示例所示:LdapTemplate
@Component
public class MyBean {
private final LdapTemplate template;
public MyBean(LdapTemplate template) {
this.template = template;
}
}
@Component
class MyBean(private val template: LdapTemplate) {
}
2.8.3. 嵌入式内存 LDAP 服务器
出于测试目的, Spring Boot 支持从 UnboundID 自动配置内存中的 LDAP 服务器。
要配置服务器,请添加依赖项并声明属性,如下所示:com.unboundid:unboundid-ldapsdk
spring.ldap.embedded.base-dn
spring.ldap.embedded.base-dn=dc=spring,dc=io
spring:
ldap:
embedded:
base-dn: "dc=spring,dc=io"
可以定义多个 base-dn 值,但是,由于专有名称通常包含逗号,因此必须使用正确的表示法来定义它们。 在 yaml 文件中,您可以使用 yaml 列表表示法。在属性文件中,必须将索引作为属性名称的一部分包含在内: 性能
Yaml
|
默认情况下,服务器在随机端口上启动并触发常规 LDAP 支持。
无需指定属性。spring.ldap.urls
如果您的 Classpath 上有一个文件,则使用它来初始化服务器。
如果要从其他资源加载初始化脚本,还可以使用 property .schema.ldif
spring.ldap.embedded.ldif
默认情况下,使用标准架构来验证文件。
您可以通过设置该属性来完全关闭验证。
如果您有自定义属性,则可以使用 来定义自定义属性类型或对象类。LDIF
spring.ldap.embedded.validation.enabled
spring.ldap.embedded.validation.schema
2.9. InfluxDB 数据库
InfluxDB 是一个开源时间序列数据库,针对操作监控、应用程序指标、物联网传感器数据和实时分析等领域的时间序列数据的快速、高可用性存储和检索进行了优化。
2.9.1. 连接到 InfluxDB
Spring Boot 会自动配置一个实例,前提是客户端位于 Classpath 上并且设置了数据库的 URL,如以下示例所示:InfluxDB
influxdb-java
spring.influx.url=https://172.0.0.1:8086
spring:
influx:
url: "https://172.0.0.1:8086"
如果与 InfluxDB 的连接需要用户和密码,您可以相应地设置 and 属性。spring.influx.user
spring.influx.password
InfluxDB 依赖于 OkHttp。
如果需要在后台调整 http 客户端的使用,则可以注册一个 bean。InfluxDB
InfluxDbOkHttpClientBuilderProvider
如果需要对配置进行更多控制,请考虑注册 Bean。InfluxDbCustomizer
3. 下一步要读什么
现在,您应该对如何将 Spring Boot 与各种数据技术结合使用有所了解。 从这里,您可以了解 Spring Boot 对各种消息传递技术的支持,以及如何在您的应用程序中启用它们。