一、使用SQL数据库
Spring框架为使用SQL数据库提供了广泛的支持,从使用JdbcTemplate的直接JDBC访问到完成Hibernate等“对象关系映射”技术。Spring Data提供了附加的功能级别:直接从接口创建存储库实现,并使用约定从方法名生成查询。
1.配置数据源
Java的javax.sql.DataSource接口提供了处理数据库连接的标准方法。传统上,“数据源”使用URL和一些凭证来建立数据库连接。
1.1嵌入式数据库的支持
通过使用内存中的嵌入式数据库来开发应用程序通常很方便。显然,内存数据库不提供持久存储。您需要在应用程序启动时填充数据库,并准备在应用程序结束时丢弃数据。
Spring Boot可以自动配置嵌入的H2、HSQL和Derby数据库。您不需要提供任何连接url。您只需要包含对要使用的嵌入式数据库的构建依赖项。
注:如果您在测试中使用这个特性,您可能会注意到,无论您使用多少应用程序上下文,整个测试套件都会重用相同的数据库。如果希望确保每个上下文都有单独的嵌入式数据库,应该设置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可以在数据库关闭时启动控制,从而确保不再需要访问数据库时启动控制。
1.2连接到生产数据库
还可以使用池数据源自动配置生产数据库连接。Spring Boot使用以下算法来选择特定的实现:
a.我们更喜欢HikariCP的性能和并发性。如果有HikariCP,我们总是选择它。
b.否则,如果Tomcat池数据源可用,我们就使用它。
c.如果HikariCP和Tomcat池数据源都不可用,并且如果Commons DBCP2可用,则使用它。
如果您使用spring-boot-starter-jdbc或spring-boot-starter-data-jpa“启动器”,您将自动获得对HikariCP的依赖
注:您可以完全绕过该算法,并通过设置spring.datasource.type属性指定要使用的连接池。如果您在Tomcat容器中运行应用程序,这一点尤其重要,因为缺省情况下提供了Tomcat -jdbc。
可以手动配置其他连接池。如果定义自己的数据源bean,则不会发生自动配置。
数据源配置由spring.datasource.*中的外部配置属性控制。例如,您可以在application.properties中声明以下部分:
spring.datasource.url=jdbc:mysql://localhost/test spring.datasource.username=dbuser spring.datasource.password=dbpass spring.datasource.driver-class-name=com.mysql.jdbc.Driver
注:您至少应该指定URL,通过设置spring.datasource.url属性。否则,Spring Boot将尝试自动配置嵌入式数据库。
通常不需要指定驱动程序类名,因为Spring Boot可以从url推断大多数数据库的驱动程序类名。
为了创建池数据源,我们需要能够验证一个有效的驱动程序类是可用的,所以我们在做任何事情之前都要检查它。换句话说,如果您设置了spring.datasource.driver-class-name=com.mysql.jdbc。这个类必须是可加载的。
有关更多受支持的选项,请参见DataSourceProperties。这些是不管实际实现如何工作的标准选项。还可以通过使用它们各自的前缀来微调特定于实现的设置(spring.datasource.hikari.*
, spring.datasource.tomcat.*
, and spring.datasource.dbcp2.*
).有关详细信息,请参阅正在使用的连接池实现的文档。
例如,如果使用Tomcat连接池,您可以自定义许多其他设置,如下面的示例所示:
# Number of ms to wait before throwing an exception if no connection is available. spring.datasource.tomcat.max-wait=10000 # Maximum number of active connections that can be allocated from this pool at the same time. spring.datasource.tomcat.max-active=50 # Validate the connection before borrowing it from the pool. spring.datasource.tomcat.test-on-borrow=true
1.3连接JNDI数据源
如果将Spring启动应用程序部署到应用服务器,则可能希望使用应用服务器的内置特性配置和管理数据源,并使用JNDI访问数据源。
spring.datasource.ndi-name属性可以作为spring.datasource.url的替代。spring.datasource.username和spring.datasource.password属性用于从特定JNDI位置访问数据源。例如,在application.properties的配置,显示如何访问JBoss作为定义的数据源:
spring.datasource.jndi-name=java:jboss/datasources/customers
2.使用JdbcTemplate
Spring的JdbcTemplate和NamedParameterJdbcTemplate类是自动配置的,您可以@Autowire直接将它们放到您自己的bean中,如下例所示:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; @Component public class MyBean { private final JdbcTemplate jdbcTemplate; @Autowired public MyBean(JdbcTemplate jdbcTemplate) { this.jdbcTemplate = jdbcTemplate; } // ... }
您可以使用spring.jdbc.template.*属性来自定义模板的一些属性。如下例所示:
spring.jdbc.template.max-rows=500
注:NamedParameterJdbcTemplate在后台重用同一个JdbcTemplate实例。如果定义了多个JdbcTemplate,并且不存在主候选模板,则不会自动配置NamedParameterJdbcTemplate。
3.JPA和Spring Data JPA
Java Persistence API是一种标准技术,允许将对象“映射”到关系数据库。spring-boot-starter-data-jpa POM提供了一种快速启动方法。它提供了以下关键依赖:
a.Hibernate:最流行的JPA实现之一。
b.Spring Data JPA:使得实现基于JPA的存储库变得很容易。
c.Spring ORM:来自Spring框架的核心ORM支持。
3.1实体类
传统上,JPA“实体”类是在persistence.xml文件中指定的。在Spring引导中,这个文件不是必需的,而是使用“实体扫描”。默认情况下,主配置类下面的所有包(使用@EnableAutoConfiguration或@SpringBootApplication注释的包)都会被搜索。
考虑使用@Entity、@Embeddable或@MappedSuperclass注释的任何类。一个典型的实体类类似于下面的例子:
package com.example.myapp.domain; import java.io.Serializable; import javax.persistence.*; @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 shouldn't 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 }
注:可以使用@EntityScan注释自定义实体扫描位置。
3.2Spring Data JPA仓储
Spring Data JPA存储库是您可以定义来访问数据的接口。JPA查询是根据您的方法名自动创建的。例如,CityRepository接口可以声明一个findAllByState(String state)方法来查找给定状态下的所有城市。
对于更复杂的查询,您可以使用Spring Data的查询注释来注释您的方法。
Spring数据存储库通常从存储库或CrudRepository接口扩展。如果使用自动配置,将从包含主配置类的包(使用@EnableAutoConfiguration或@SpringBootApplication注释的类)向下搜索存储库。
下面的例子展示了一个典型的Spring数据仓库接口定义:
package com.example.myapp.domain; import org.springframework.data.domain.*; import org.springframework.data.repository.*; public interface CityRepository extends Repository<City, Long> { Page<City> findAll(Pageable pageable); City findByNameAndStateAllIgnoringCase(String name, String state); }
Spring Data JPA存储库支持三种不同的引导模式:默认模式、延迟模式和延迟模式。要启用延迟引导或延迟引导,请分别将spring.data.jpa. reposeries .bootstrap-mode属性设置为延迟引导或延迟引导。当使用延迟引导或延迟引导时,自动配置的EntityManagerFactoryBuilder将使用上下文的AsyncTaskExecutor(如果有的话)作为引导执行器。如果存在多个任务,则将使用名为applicationTaskExecutor的任务。
我们仅仅触及了Spring Data JPA的皮毛。有关完整的详细信息,请参阅Spring Data JPA参考文档。https://docs.spring.io/spring-data/jdbc/docs/1.1.3.RELEASE/reference/html/#jdbc.why 或者私人文档:https://www.cnblogs.com/cmfwm/p/8109433.html
3.2Spring Data JPA资料库
Spring Data JPA存储库是您可以定义来访问数据的接口。JPA查询是根据您的方法名自动创建的。例如,CityRepository接口可以声明一个findAllByState(String state)方法来查找给定状态下的所有城市。
对于更复杂的查询,您可以使用Spring Data的查询注释来注释您的方法。
Spring数据存储库通常从存储库或CrudRepository接口扩展。如果使用自动配置,将从包含主配置类的包(使用@EnableAutoConfiguration或@SpringBootApplication注释的类)向下搜索存储库。
下面的例子展示了一个典型的Spring数据仓库接口定义:
package com.example.myapp.domain; import org.springframework.data.domain.*; import org.springframework.data.repository.*; public interface CityRepository extends Repository<City, Long> { Page<City> findAll(Pageable pageable); City findByNameAndStateAllIgnoringCase(String name, String state); }
Spring Data JPA存储库支持三种不同的引导模式:默认模式、延迟模式和懒加载模式。要启用延迟模式或懒加载模式,请分别将spring.data.jpa. reposeries .bootstrap-mode属性设置为deferred或lazy。当使用延迟模式或懒加载模式时,自动配置的EntityManagerFactoryBuilder将使用上下文的AsyncTaskExecutor(如果有的话)作为引导执行器。如果存在多个任务,则将使用名为applicationTaskExecutor的任务。
我们仅仅触及了Spring Data JPA的皮毛。有关完整的详细信息,请参阅Spring Data JPA参考文档。https://docs.spring.io/spring-data/jdbc/docs/1.1.3.RELEASE/reference/html/#reference
3.3创建和删除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传递了一个true值。Hibernate实体管理器的globally_quoted_identifier属性。
默认情况下,DDL执行(或验证)被延迟到ApplicationContext启动之后。还有spring.jpa.generate-ddl标志,但是如果Hibernate自动配置是活动的,就不使用它,因为ddl-auto设置的粒度更细。
3.4在视图中打开EntityManager
如果您正在运行一个web应用程序,Spring启动默认注册OpenEntityManagerInViewInterceptor来应用“Open EntityManager in View”模式,以允许在web视图中延迟加载。如果您不想要这种行为,您应该将application.properties中的spring.jpa.open-in-view设置为false。
4.Spring Data JDBC
Spring数据包括对JDBC的存储库支持,并将为CrudRepository上的方法自动生成SQL。对于更高级的查询,提供了@Query注释。
当必要的依赖项在类路径上时,Spring Boot将自动配置Spring Data的JDBC存储库。它们可以通过spring-boot-starter-data-jdbc的单个依赖项添加到您的项目中。如果需要,可以通过向应用程序添加@ enablejdbcrepos注释或JdbcConfiguration子类来控制Spring Data JDBC的配置。
有关Spring Data JDBC的完整细节,请参阅参考文档。https://docs.spring.io/spring-data/jdbc/docs/1.1.3.RELEASE/reference/html/#reference
5.使用H2的web控制台
H2数据库提供了一个基于浏览器的控制台,Spring Boot可以为您自动配置。当满足以下条件时,控制台自动配置:
- 您正在开发一个基于servlet的web应用程序。
- com。h2database:h2在类路径上。
- 您正在使用Spring Boot的开发人员工具。
注:如果您没有使用Spring Boot的开发工具,但仍然希望使用H2的控制台,那么可以配置Spring.H2.console.enabled属性,其值为true。
H2控制台只打算在开发期间使用,所以您应该注意确保spring.h2.console.enabled。在生产环境中,enabled未设置为true
5.1更改H2控制台的路径
默认情况下,控制台在/h2-console上可用。您可以使用spring.h2.console.path自定义控制台的路径。
6.使用JOOQ
jOOQ面向对象查询(jOOQ)是Data Geekery的一个流行产品,它从数据库生成Java代码,并允许您通过它的fluent API构建类型安全的SQL查询。商业版和开源版都可以与Spring Boot一起使用。
6.1代码生成
为了使用jOOQ类型安全的查询,您需要从数据库模式生成Java类。您可以遵循jOOQ用户手册中的说明。如果您使用jooq-codegen-maven插件,并且还使用spring-boot-starter-parent“parent POM”,则可以安全地忽略插件的<version>标记。您还可以使用Spring启动定义的版本变量(如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>
6.2使用DSLContext
jOOQ提供的连贯API是通过org.jooq.DSLContext启动的。Spring Boot自动将DSLContext配置为Spring Bean,并将其连接到应用程序数据源。要使用DSLContext,您可以@Autowire它,如下面的例子所示:
@Component public class JooqExample implements CommandLineRunner { private final DSLContext create; @Autowired public JooqExample(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); }
6.3jOOQ SQL方言
除非spring.jooq.sql-dialect属性已配置,Spring Boot将确定数据源使用的SQL方言。如果Spring Boot无法检测到该方言,则使用默认的。
Spring Boot只能自动配置jOOQ开源版本支持的方言。
6.4定制jOOQ
可以通过定义自己的@Bean定义来实现更高级的定制,在创建jOOQ配置时使用@Bean定义。您可以为以下jOOQ类型定义bean:
ConnectionProvider
ExecutorProvider
TransactionProvider
RecordMapperProvider
RecordUnmapperProvider
Settings
RecordListenerProvider
ExecuteListenerProvider
VisitListenerProvider
TransactionListenerProvider
您还可以创建自己的org.jooq.Configuration @Bean,如果您想完全控制jOOQ配置。
二、使用NoSQL技术
Spring Data提供了额外的项目,帮助您访问各种NoSQL技术,包括:
Spring Boot为Redis、MongoDB、Neo4j、Elasticsearch、Solr Cassandra、Couchbase和LDAP提供自动配置。您可以使用其他项目,但必须自己配置它们。请参阅spring.io/projects/spring-data中相应的参考文档。
1.Redis
Redis是一个缓存、消息代理和功能丰富的键值存储。Spring Boot为Lettuce和Jedis客户机库提供基本的自动配置,并在此基础上提供Spring Data Redis提供的抽象。
有一个spring-boot-starter-data-redis“Starter”,用于以一种方便的方式收集依赖项。默认情况下,它使用Lettuce。该starter同时处理传统应用程序和反应性应用程序。
1.1连接Redis
您可以像注入任何其他Spring Bean一样注入一个自动配置的RedisConnectionFactory、StringRedisTemplate或RedisTemplate实例。默认情况下,实例尝试连接到本地主机:6379的Redis服务器。下面的清单显示了这样一个bean的示例:
@Component public class MyBean { private StringRedisTemplate template; @Autowired public MyBean(StringRedisTemplate template) { this.template = template; } // ... }
您还可以注册实现LettuceClientConfigurationBuilderCustomizer的任意数量的bean,以实现更高级的定制。如果您使用Jedis,也可以使用JedisClientConfigurationBuilderCustomizer。
如果您添加任何自动配置类型的自己的@Bean,它将取代默认的@Bean(除了RedisTemplate,当排除基于bean名称时,RedisTemplate,而不是它的类型)。默认情况下,如果commons-pool2位于类路径上,则会得到一个池化的连接工厂。
2.MongoDB
MongoDB是一个开源的NoSQL文档数据库,它使用类似json的模式,而不是传统的基于表的关系数据。Spring Boot为使用MongoDB提供了一些便利,包括Spring - Boot -starter-data- MongoDB和Spring - Boot -starter-data- MongoDB -reactive“starter”。
2.1连接MongoDB数据库
要访问Mongo数据库,可以注入一个自动配置的org.springframework.data.mongodb.MongoDbFactory。默认情况下,实例尝试连接到MongoDB服务器://localhost/test。下面的例子展示了如何连接到MongoDB数据库:
import org.springframework.data.mongodb.MongoDbFactory; import com.mongodb.DB; @Component public class MyBean { private final MongoDbFactory mongo; @Autowired public MyBean(MongoDbFactory mongo) { this.mongo = mongo; } // ... public void example() { DB db = mongo.getDb(); // ... } }
可以设置spring.data.mongodb.uri属性来更改URL并配置其他设置,如复制集,如下面的示例所示:
spring.data.mongodb.uri=mongodb://user:secret@mongo1.example.com:12345,mongo2.example.com:23456/test
或者,只要你使用Mongo 2.x,可以指定主机/端口。例如,您可以在application.properties中声明以下设置:
spring.data.mongodb.host=mongoserver
spring.data.mongodb.port=27017
如果您已经定义了自己的MongoClient,它将被用来自动配置一个合适的MongoDbFactory。com.mongodb.MongoClient 和com.mongodb.client.MongoClient都受支持。
注:如果你使用Mongo 3.0的Java驱动,spring.data.mongodb.host和spring.data.mongodb.port不被支持。在这种情况下,使用spring.data.mongodb.uri来提供所有配置。
如果spring.data.mongodb.port未指定,使用的默认值为27017。您可以从前面显示的示例中删除这一行。
如果不使用Spring Data Mongo,可以注入com.mongodb.MongoClient bean而不是MongoDbFactory。如果希望完全控制建立MongoDB连接,还可以声明自己的MongoDbFactory或MongoClient bean。
如果您正在使用响应性驱动程序,则SSL需要Netty。如果Netty可用且工厂尚未定制,则自动配置将自动配置此工厂。
2.2MongoTemplate
Spring Data MongoDB提供了一个MongoTemplate类,它的设计与Spring的JdbcTemplate非常相似。与JdbcTemplate一样,Spring Boot会自动配置一个bean来注入模板,如下所示:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.stereotype.Component; @Component public class MyBean { private final MongoTemplate mongoTemplate; @Autowired public MyBean(MongoTemplate mongoTemplate) { this.mongoTemplate = mongoTemplate; } // ... }
有关完整的详细信息,请参阅MongoOperations Javadoc。https://docs.spring.io/spring-data/mongodb/docs/2.2.3.RELEASE/api/org/springframework/data/mongodb/core/MongoOperations.html
2.3Spring Data MongoDB存储库
Spring数据包含对MongoDB的存储库支持。与前面讨论的JPA存储库一样,基本原则是根据方法名自动构造查询。
事实上,Spring Data JPA和Spring Data MongoDB共享相同的公共基础设施。您可以使用前面的JPA例子,假设City现在是一个Mongo数据类而不是JPA @Entity,它的工作方式是相同的,如下面的例子所示:
package com.example.myapp.domain; import org.springframework.data.domain.*; import org.springframework.data.repository.*; public interface CityRepository extends Repository<City, Long> { Page<City> findAll(Pageable pageable); City findByNameAndStateAllIgnoringCase(String name, String state); }
可以使用@EntityScan注释自定义文档扫描位置。
有关Spring Data MongoDB的完整细节,包括其丰富的对象映射技术,请参阅其参考文档。https://spring.io/projects/spring-data-mongodb#learn
2.4嵌入式Mongo
Spring Boot提供嵌入式Mongo的自动配置。要在您的Spring Boot应用程序中使用它,请添加一个对de.flapdoodl .embed:de.flapdoodle.embed.mongo的依赖项。
Mongo监听的端口可以通过设置spring.data.mongodb.port来配置。若要使用随机分配的自由端口,请使用0值。由MongoAutoConfiguration创建的MongoClient被自动配置为使用随机分配的端口。
如果没有配置自定义端口,则默认情况下嵌入式支持使用随机端口(而不是27017)。
如果类路径上有SLF4J, Mongo生成的输出将自动路由到一个名为org.springframework.boot.autoconfigure.mongo.embedded.EmbeddedMongo的日志程序。
您可以声明自己的IMongodConfig和IRuntimeConfig bean来控制Mongo实例的配置和日志路由。可以通过声明DownloadConfigBuilderCustomizer bean来定制下载配置。
3.Neo4j
Neo4j是一个开源的NoSQL图形数据库,它使用了由一级关系连接的节点的丰富数据模型,比传统的RDBMS方法更适合连接大数据。Spring Boot为使用Neo4j提供了一些便利,包括spring-boot-starter-data-neo4j“Starter”。
3.1连接Neo4j数据库
要访问Neo4j服务器,您可以注入一个自动配置的org.neo4j.ogm.session.Session。默认情况下,实例尝试使用Bolt协议连接到localhost:7687上的Neo4j服务器。下面的例子展示了如何注入一个Neo4j会话:
@Component public class MyBean { private final Session session; @Autowired public MyBean(Session session) { this.session = session; } // ... }
您可以通过设置spring.data.neo4j.*来配置要使用的uri和凭据。如下例所示:
spring.data.neo4j.uri=bolt://my-server:7687 spring.data.neo4j.username=neo4j spring.data.neo4j.password=secret
您可以通过添加org.neo4j.ogm.config来完全控制会话的创建。配置bean或org.neo4j.ogm.session.SessionFactory bean。
初步了解:Neo4j使用在关系图谱上会比较好,例如反欺诈多维关联分析场景、社交网络图谱、企业关系图谱等。
3.2使用嵌入式模式
如果你在应用中添加org.neo4j:neo4j-ogm-embedded-driver的依赖,Spring Boot会自动配置Neo4j的进程内嵌入式实例,当应用程序关闭时,该实例不会持久化任何数据。
注:由于内嵌的Neo4j OGM驱动程序本身不提供Neo4j内核,所以必须声明org.neo4j:neo4j就是依赖你自己。有关兼容版本的列表,请参阅Neo4j OGM文档https://neo4j.com/docs/ogm-manual/current/reference/#reference:getting-started
当类路径上有多个驱动程序时,嵌入式驱动程序优先于其他驱动程序。您可以通过设置spring.data.neo4j.embedded.enabled=false来显式地禁用嵌入模式。
如果内嵌的驱动程序和内嵌的Neo4j内核如前所述位于类路径上,那么数据Neo4j测试就会自动利用内嵌的Neo4j实例。
您可以通过在配置中提供数据库文件的路径来启用嵌入式模式的持久性,例如,spring.data.neo4j.uri=file://var/tmp/graph.db。
3.3使用本机类型
Neo4j-OGM可以映射一些类型,比如java.time.*中的那些,指向基于字符串的属性或指向Neo4j提供的一种本机类型。出于向后兼容的原因,Neo4j-OGM的默认方式是使用基于字符串的表示。要使用本机类型,请添加一个依赖项,org.neo4j: neo4j-ogm-bolt-native-types或org.neo4j:neo4j-ogmp-embedded-native-types,并配置spring.data.neo4j.use-native-types属性如下例所示:
spring.data.neo4j.use-native-types=true
3.4Neo4j会话
默认情况下,如果您正在运行一个web应用程序,在整个请求处理过程中,会话被绑定到线程(也就是说,它使用“Open session in View”模式)。如果不想要此行为,请将以下行添加到应用程序中。属性文件:
spring.data.neo4j.open-in-view=false
3.5Spring Data Neo4j存储库
Spring数据包括对Neo4j的存储库支持。
与许多其他Spring数据模块一样,Spring Data Neo4j与Spring Data JPA共享公共基础设施。您可以使用前面的JPA示例,将City定义为Neo4j OGM @NodeEntity而不是JPA @Entity,而存储库抽象也是以相同的方式工作的,如下面的示例所示:
package com.example.myapp.domain; import java.util.Optional; import org.springframework.data.neo4j.repository.*; public interface CityRepository extends Neo4jRepository<City, Long> { Optional<City> findOneByNameAndState(String name, String state); }
spring-boot-starter-data-neo4j“Starter”支持存储库支持和事务管理。您可以在@Configuration-bean上分别使用@ enableneo4jrepository和@EntityScan来定制位置,以查找存储库和实体。
有关Spring Data Neo4j的完整细节,包括它的对象映射技术,请参阅参考文档。https://docs.spring.io/spring-data/neo4j/docs/5.2.3.RELEASE/reference/html/#reference
4.Solr
Apache Solr是一个搜索引擎。Spring Boot为solr5客户端库提供了基本的自动配置,并在此基础上提供了Spring Data Solr提供的抽象。有一个spring-boot-starter-data-solr“Starter”,用于以一种方便的方式收集依赖项。
4.1连接到Solr
可以像注入任何其他Spring bean一样注入自动配置的SolrClient实例。默认情况下,实例尝试连接到localhost:8983/solr上的服务器。下面的例子展示了如何注入Solr bean:
@Component public class MyBean { private SolrClient solr; @Autowired public MyBean(SolrClient solr) { this.solr = solr; } // ... }
如果您添加自己的类型为SolrClient的@Bean,它将取代默认的@Bean。
4.2Spring Data Solr 存储库
Spring数据包括对Apache Solr的存储库支持。与前面讨论的JPA存储库一样,基本原则是根据方法名自动构造查询。
事实上,Spring Data JPA和Spring Data Solr共享相同的公共基础设施。您可以使用前面的JPA示例,并且假设City现在是一个@SolrDocument类而不是JPA @Entity,它的工作方式是相同的。
关于Spring Data Solr的完整细节,请参阅参考文档。https://docs.spring.io/spring-data/solr/docs/4.1.3.RELEASE/reference/html/#reference
5.Elasticsearch
Elasticsearch是一个开源、分布式、RESTful搜索和分析引擎。Spring Boot为Elasticsearch提供基本的自动配置。
Spring Boot支持多个客户端:
- 官方的Java“低级”和“高级”REST客户机
- 由Spring Data Elasticsearch提供的ReactiveElasticsearchClient
传输客户端仍然可用,但它的支持已经在Spring数据弹搜索和弹搜索本身中被弃用。它将在未来的版本中被删除。Spring Boot提供了一个专用的“启动器”,即spring-boot-starter-data-elasticsearch。
Jest客户机也被弃用了,因为Elasticsearch和Spring Data Elasticsearch都为REST客户机提供官方支持。
5.1使用REST客户端连接到Elasticsearch
Elasticsearch提供了两个不同的REST客户机,您可以使用它们来查询集群:“低级”客户机和“高级”客户机。
如果你有org.elasticsearch.client:elasticsearch-rest-client依赖于类路径,Spring Boot将自动配置并注册一个RestClient bean,该bean的默认目标是localhost:9200。您可以进一步调整如何配置RestClient,如下面的示例所示:
spring.elasticsearch.rest.uris=https://search.example.com:9200 spring.elasticsearch.rest.read-timeout=10s spring.elasticsearch.rest.username=user spring.elasticsearch.rest.password=secret
您还可以注册任意数量的bean,这些bean实现了更多高级定制的RestClientBuilderCustomizer。要完全控制注册,定义一个RestClient bean。
如果你在类路径上有org.elasticsearch.client:elasticsearch-rest-high-level-client依赖,Spring Boot将自动配置一个RestHighLevelClient,它会覆盖任何已存在的RESTClient bean,重用其HTTP配置。
5.2使用响应性REST客户端连接到Elasticsearch
Spring Data Elasticsearch以响应的方式提供ReactiveElasticsearchClient来查询Elasticsearch实例。它构建在WebFlux的web客户端之上,因此spring-boot-starter-elasticsearch和spring-boot-starter-webflux依赖项都有助于实现这种支持。
默认情况下,Spring Boot将自动配置并注册一个ReactiveElasticsearchClient bean,目标是本地主机:9200。你可以进一步调整如何配置,如下面的例子所示:
spring.data.elasticsearch.client.reactive.endpoints=search.example.com:9200 spring.data.elasticsearch.client.reactive.use-ssl=true spring.data.elasticsearch.client.reactive.socket-timeout=10s spring.data.elasticsearch.client.reactive.username=user spring.data.elasticsearch.client.reactive.password=secret
如果配置属性不够,并且希望完全控制客户端配置,则可以注册自定义ClientConfiguration bean。
5.3使用Jest连接Elasticsearch
既然Spring Boot支持官方的reslevelclient,那么Jest支持就被弃用了。
如果类路径上有Jest,则可以注入一个自动配置的JestClient,默认目标是localhost:9200。你可以进一步调整如何配置客户端,如下例所示:
spring.elasticsearch.jest.uris=https://search.example.com:9200 spring.elasticsearch.jest.read-timeout=10000 spring.elasticsearch.jest.username=user spring.elasticsearch.jest.password=secret
您还可以注册任意数量的bean,这些bean实现HttpClientConfigBuilderCustomizer以实现更高级的定制。下面的例子调校额外的HTTP设置:
static class HttpSettingsCustomizer implements HttpClientConfigBuilderCustomizer { @Override public void customize(HttpClientConfig.Builder builder) { builder.maxTotalConnection(100).defaultMaxTotalConnectionPerRoute(5); } }
要完全控制注册,定义一个JestClient bean。
5.4通过使用Spring Data连接到Elasticsearch
要连接到Elasticsearch,必须定义reslevelclient bean,由Spring引导自动配置,或者由应用程序手动提供(请参阅前面的部分)。有了这个配置,就可以像注入任何其他Spring bean一样注入ElasticsearchRestTemplate,如下例所示:
@Component public class MyBean { private final ElasticsearchRestTemplate template; public MyBean(ElasticsearchRestTemplate template) { this.template = template; } // ... }
有了spring-data-elasticsearch和使用WebClient(通常是spring-boot-starter-webflux)所需的依赖项,Spring Boot还可以将ReactiveElasticsearchClient和ReactiveElasticsearchTemplate自动配置为bean。它们是其他REST客户机的对应响应。
5.5Spring Data Elasticsearch Repositories(存储库)
Spring数据包括对Elasticsearch的存储库支持。与前面讨论的JPA存储库一样,基本原则是根据方法名自动构造查询。
事实上,Spring Data JPA和Spring Data Elasticsearch共享相同的基础架构。您可以使用前面的JPA示例,并且假设City现在是一个Elasticsearch @Document类而不是JPA @Entity,它的工作方式是相同的。
有关Spring Data Elasticsearch的完整细节,请参阅参考文档。https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/#reference
Spring Boot使用ElasticsearchRestTemplate或ReactiveElasticsearchTemplate bean支持classic和reactive Elasticsearch存储库。如果提供了所需的依赖项,这些bean很可能是通过Spring Boot自动配置的。
如果您希望使用自己的模板来支持Elasticsearch存储库,您可以添加自己的ElasticsearchRestTemplate或ElasticsearchOperations @Bean,只要它被命名为“elasticsearchTemplate”即可。这同样适用于ReactiveElasticsearchTemplate和ReactiveElasticsearchOperations,它们的bean名是“ReactiveElasticsearchTemplate”。
你可以选择禁用仓库支持与以下属性:
spring.data.elasticsearch.repositories.enabled=false
6.Cassandra
Cassandra是一个开源的分布式数据库管理系统,设计用于处理跨许多普通服务器的大量数据。Spring Boot为Cassandra提供了自动配置,并在此基础上提供了Spring Data Cassandra提供的抽象。有一个spring-boot-starter-data-cassandra“Starter”,用于以一种方便的方式收集依赖项。
6.1连接到Cassandra
您可以将自动配置的CassandraTemplate或Cassandra会话实例注入到任何其他Spring Bean中。spring.data.cassandra.*属性可用于自定义连接。通常,您提供keyspace-name和contact-points属性,如下面的示例所示:
spring.data.cassandra.keyspace-name=mykeyspace
spring.data.cassandra.contact-points=cassandrahost1,cassandrahost2
您还可以注册任意数量的bean,这些bean实现了ClusterBuilderCustomizer,用于更高级的定制。
下面的代码清单展示了如何注入一个Cassandra bean:
@Component public class MyBean { private CassandraTemplate template; @Autowired public MyBean(CassandraTemplate template) { this.template = template; } // ... }
如果您添加自己的@Bean类型CassandraTemplate,它将取代默认值。
6.2Spring Data Cassandra Repositories
Spring数据包括对Cassandra的基本存储库支持。目前,这比前面讨论的JPA存储库更受限制,需要使用@Query注释查找器方法。
有关Spring Data Cassandra的完整细节,请参阅参考文档。https://docs.spring.io/spring-data/cassandra/docs/
7.Couchbase
简介:https://sq.163yun.com/blog/article/189804692240617472
Couchbase是一个开源、分布式、多模型的NoSQL面向文档的数据库,它针对交互式应用程序进行了优化。Spring Boot提供了对Couchbase的自动配置,以及Spring Data Couchbase提供的抽象。有spring-boot-start-data-couchbase和spring-boot-start -data-couchbase-reactive“启动程序”,它们可以方便地收集依赖项。
7.1连接到Couchbase
通过添加Couchbase SDK和一些配置,可以获得Bucket和集群。spring.couchbase.*属性可用于自定义连接。通常,您需要提供引导hosts、bucket name和password,如下面的示例所示:
spring.couchbase.bootstrap-hosts=my-host-1,192.168.1.123 spring.couchbase.bucket.name=my-bucket spring.couchbase.bucket.password=secret
至少需要提供引导host(s),在这种情况下,bucket名称是默认的,密码是空字符串。或者,您可以定义自己的org.springframe.data.couchbase.config.CouchbaseConfigurer @Bean来控制整个配置。
还可以定制一些CouchbaseEnvironment设置。例如,下面的配置更改了用于打开新Bucket并启用SSL支持的超时:
spring.couchbase.env.timeouts.connect=3000 spring.couchbase.env.ssl.key-store=/location/of/keystore.jks spring.couchbase.env.ssl.key-store-password=secret
检查spring.couchbase.env.*属性了解更多细节。
7.2Spring Data Couchbase 存储库
Spring数据包括对Couchbase的存储库支持。有关Spring Data Couchbase的完整细节,请参阅参考文档。https://docs.spring.io/spring-data/couchbase/docs/current/reference/html/#reference
您可以像使用任何其他Spring Bean一样注入一个自动配置的CouchbaseTemplate实例,只要有一个可用的缺省CouchbaseConfigurer(在启用Couchbase支持时发生,如前所述)。
下面的例子展示了如何注入一个Couchbase bean:
@Component public class MyBean { private final CouchbaseTemplate template; @Autowired public MyBean(CouchbaseTemplate template) { this.template = template; } // ... }
你可以在自己的配置中定义一些bean来覆盖自动配置提供的bean:
- 名称为CouchbaseTemplate的@Bean。
- 名称为couchbaseIndexManager的IndexManager @Bean。
- 一个名为couchbaseCustomConversions的CustomConversions @Bean。
为了避免在自己的配置中硬编码这些名称,可以重用Spring Data Couchbase提供的BeanNames。例如,您可以自定义转换器来使用,如下所示:
@Configuration(proxyBeanMethods = false) public class SomeConfiguration { @Bean(BeanNames.COUCHBASE_CUSTOM_CONVERSIONS) public CustomConversions myCustomConversions() { return new CustomConversions(...); } // ... }
如果您想完全绕过Spring Data Couchbase的自动配置,请提供您自己的org.springframework.data.couchbase.config.AbstractCouchbaseDataConfiguration实现。
8.LDAP
轻量级目录访问协议LDAP是一种开放的、与供应商无关的行业标准应用程序协议,用于通过IP网络访问和维护分布式目录信息服务。Spring Boot为任何兼容的LDAP服务器提供自动配置,并支持来自UnboundID的嵌入式内存LDAP服务器。
LDAP抽象由Spring Data LDAP提供。有一个spring-boot-starter-data-ldap“Starter”,用于以一种方便的方式收集依赖项。
8.1连接到LDAP服务
要连接到LDAP服务器,请确保声明对spring-boot-starter-data-ldap“Starter”或spring-ldap-core的依赖项,然后在应用程序中声明服务器的url。属性如下例所示:
spring.ldap.urls=ldap://myserver:1235 spring.ldap.username=admin spring.ldap.password=secret
如果需要自定义连接设置,可以使用spring.ldap.base和spring.ldap.base-enviroment属性。
根据这些设置自动配置LdapContextSource。如果您需要自定义它,例如使用PooledContextSource,您仍然可以注入自动配置的LdapContextSource。确保将定制的ContextSource标记为@Primary,以便自动配置的LdapTemplate使用它。
8.2Spring Data LDAP Repositories
Spring数据包括对LDAP的存储库支持。有关Spring Data LDAP的完整细节,请参阅参考文档。https://docs.spring.io/spring-data/ldap/docs/1.0.x/reference/html/
您还可以将自动配置的LdapTemplate实例注入到任何其他Spring Bean中,如下面的示例所示:
@Component public class MyBean { private final LdapTemplate template; @Autowired public MyBean(LdapTemplate template) { this.template = template; } // ... }
8.3.嵌入式内存中的LDAP服务器
出于测试目的,Spring Boot支持从UnboundID自动配置内存中的LDAP服务器。要配置服务器,请向com添加一个依赖项。并声明一个spring.ldap.embedded.base-dn属性,如下:
spring.ldap.embedded.base-dn=dc=spring,dc=io
可以定义多个基本dn值,但是,由于专有名称通常包含逗号,因此必须使用正确的表示法来定义它们。
在yaml文件中,你可以使用yaml列表符号:
spring.ldap.embedded.base-dn: - dc=spring,dc=io - dc=pivotal,dc=io
在属性文件中,必须将索引包含在属性名中:
spring.ldap.embedded.base-dn[0]=dc=spring,dc=io
spring.ldap.embedded.base-dn[1]=dc=pivotal,dc=io
默认情况下,服务器启动于一个随机端口并触发常规LDAP支持。不需要指定spring.ldap.urls属性。
如果在类路径上有一个schema.ldif文件,它用于初始化服务器。如果希望从不同的资源加载初始化脚本,还可以使用spring.ldap.embedded.ldif属性。
默认情况下,使用标准模式验证LDIF文件。您可以通过设置spring.ldap.embedde.validation.enabled属性来完全关闭验证。如果您有自定义属性,您可以使用spring.ldap.embedded.validation.schema。模式来定义自定义属性类型或对象类。
9.InfluxDB
简介:https://www.influxdata.com/get-influxdb/
InfluxDB是一个开放源代码的时间序列数据库,针对快速、高可用性存储和检索时间序列数据,如操作监控、应用程序度量、物联网传感器数据和实时分析等领域进行了优化。
9.1.连接到InfluxDB
Spring Boot自动配置一个InfluxDB实例,前提是Influxdb-java客户端位于类路径上,并且设置了数据库的URL,如下例所示:
spring.influx.url=https://172.0.0.1:8086
如果到InfluxDB的连接需要用户和密码,您可以设置相应的spring.influx.user和spring.influx.password属性。
InfluxDB依赖于OkHttp。如果您需要调优后台使用的http客户机 InfluxDB,您可以注册一个影响InfluxDbOkHttpClientBuilderProvider bean。