This project provides a Spring Batch extension module that adds support for Notion.
Spring Batch Notion is based on Spring Batch 5 and tested on Spring Boot 3, thus requiring at least Java 17.
Compatibility is guaranteed only with the Spring Boot versions under OSS support.
<dependency>
<groupId>org.springframework.batch.extensions</groupId>
<artifactId>spring-batch-notion</artifactId>
<version>${spring-batch-notion.version}</version>
</dependency>
implementation("org.springframework.batch.extensions:spring-batch-notion:${springBatchNotionVersion}")
The NotionDatabaseItemReader
is a restartable ItemReader
that reads entries from a Notion Database via a paging technique.
A minimal configuration of the item reader is as follows:
NotionDatabaseItemReader<Item> itemReader() {
NotionDatabaseItemReader<Item> reader = new NotionDatabaseItemReader<>();
reader.setToken(System.getenv("NOTION_TOKEN"));
reader.setDatabaseId("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX"); // UUID
reader.setPropertiesMapper(new CustomPropertyMapper());
return reader;
}
The following configuration options are available:
Property | Required | Default | Description |
---|---|---|---|
baseUrl |
no | https://api.notion.com/v1 |
Base URL of the Notion API. A custom value can be provided for testing purposes (e.g., the URL of a WireMock server). |
databaseId |
yes | - | UUID of the database to read from. |
filter |
no | null |
Filter condition to limit the returned items. |
pageSize |
no | 100 |
Number of items to be read with each page. Must be greater than zero and less than or equal to 100. |
propertyMapper |
yes | - | The PropertyMapper responsible for mapping properties of a Notion item into a Java object. |
sorts |
no | null |
Sort conditions to order the returned items. Each condition is applied following the declaration order. |
token |
yes | - | The Notion integration token. |
In addition to the Notion-specific configuration, all the configuration options of the Spring Batch
AbstractPaginatedDataItemReader
are supported.
The NotionDatabaseItemReader
requires a PropertyMapper
to map the properties of a Notion item into an object.
Currently, only properties of type Title and Rich Text are supported, and both are converted to strings.
The following PropertyMapper
implementations are provided out of the box.
Name | Description |
---|---|
BeanWrapperPropertyMapper |
Supports JavaBeans. Requires a default constructor and expects the setter names to match the Notion item property names (case-insensitive). |
ConstructorPropertyMapper |
Supports types with a constructor with arguments. Requires the constructor to be unique and its argument names to match the Notion item property names (case-insensitive). |
RecordPropertyMapper |
Supports Java records. It uses the canonical constructor and requires the component names to match the Notion item property names (case-insensitive). |
All implementations above offer two constructors:
- One accepting the
Class
instance of the type to be mapped - One without parameters, for cases where the type to be mapped can be inferred by the generic type of the variable or method enclosing the constructor declaration
In case none of the provided implementations is suitable, a custom one can be provided.
Currently not provided but will be added in the future.
The Spring Batch Notion is released under version 2.0 of the Apache License.