您应该看看社区项目Spring Content。该项目为您提供了一种类似于 Spring Data 的内容方法。它是非结构化数据(文档、图像、视频等),Spring Data 是结构化数据。您可以使用以下内容添加它:-
pom.xml(也可以使用 Spring Boot 启动器)
<!-- Java API -->
<dependency>
<groupId>com.github.paulcwarren</groupId>
<artifactId>spring-content-jpa</artifactId>
<version>0.9.0</version>
</dependency>
<!-- REST API -->
<dependency>
<groupId>com.github.paulcwarren</groupId>
<artifactId>spring-content-rest</artifactId>
<version>0.9.0</version>
</dependency>
配置
@Configuration
@EnableJpaStores
@Import("org.springframework.content.rest.config.RestConfiguration.class") <!-- enables REST API)
public class ContentConfig {
<!-- specify the resource specific to your database -->
@Value("/org/springframework/content/jpa/schema-drop-h2.sql")
private ClasspathResource dropBlobTables;
<!-- specify the resource specific to your database -->
@Value("/org/springframework/content/jpa/schema-h2.sql")
private ClasspathResource createBlobTables;
@Bean
DataSourceInitializer datasourceInitializer() {
ResourceDatabasePopulator databasePopulator =
new ResourceDatabasePopulator();
databasePopulator.addScript(dropBlobTables);
databasePopulator.addScript(createBlobTables);
databasePopulator.setIgnoreFailedDrops(true);
DataSourceInitializer initializer = new DataSourceInitializer();
initializer.setDataSource(dataSource());
initializer.setDatabasePopulator(databasePopulator);
return initializer;
}
}
注意:如果您使用 Spring Boot 启动器,则不需要此配置。
要关联内容,请将 Spring Content 注释添加到您的帐户实体。
Example.java
@Entity
public class Report {
// replace @Lob field with:
@ContentId
private String contentId;
@ContentLength
private long contentLength = 0L;
// if you have rest endpoints
@MimeType
private String mimeType = "text/plain";
创建一个“商店”:
ExampleStore.java
@StoreRestResource(path="reportContent")
public interface ReportContentStore extends ContentStore<Report, String> {
}
这就是创建 REST 端点 @ 所需的全部内容/reportContent
。当您的应用程序启动时,Spring Content 将查看您的依赖项(查看 Spring Content JPA/REST),查看您的ReportContentStore
接口并为 JPA 注入该接口的实现。它还将注入一个@Controller
将http请求转发到该实现的。这使您不必自己实现任何这些。
所以...
curl -X POST /reportsContent/{reportId}
-F 'data=@path/to/local/file'</p>
会将 的内容存储path/to/local/file
在数据库中,并将其与 id 为 的报表实体相关联reportId
。
curl /reportContent/{reportId}
将再次获取它等等...支持完整的 CRUD。
这里有一些入门指南和视频。参考指南在这里。
高温高压