Skip to content

Commit 8965508

Browse files
committed
Add autoconfiguration and starter for Spring Boot 2
1 parent c3cc3cf commit 8965508

11 files changed

Lines changed: 273 additions & 1 deletion

File tree

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,5 @@ buildNumber.properties
1717
.classpath
1818

1919
.settings
20+
21+
.factorypath

README.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,24 @@ The client is available in the [Maven Central Repository](https://mvnrepository.
1717
</dependency>
1818
```
1919

20+
### Spring Boot Starter
21+
If you are using Spring Boot, you can instead use the starter, which includes the api-client itself and an AutoConfiguration to create a RecombeeClient Bean. Add the following `<dependency>` entry to your project's POM:
22+
23+
```xml
24+
<dependency>
25+
<groupId>com.recombee</groupId>
26+
<artifactId>api-client-spring-boot-2-starter</artifactId>
27+
<version>4.1.0</version>
28+
</dependency>
29+
```
30+
For the automatic configuration of the bean, you need to add the following properties:
31+
32+
```yaml
33+
com.recombee.client.database-id=my-database-id
34+
com.recombee.client.token=db-private-token
35+
com.recombee.client.region=US_WEST
36+
```
37+
2038
## Examples
2139

2240
### Basic example
@@ -39,6 +57,8 @@ import java.util.Random;
3957
public class BasicExample {
4058
public static void main(String[] args) {
4159

60+
// Create an instance of the client manually. If you are using Spring Boot with the starter,
61+
// you can use dependency injection to get a fully configured instance of the RecombeeClient.
4262
RecombeeClient client = new RecombeeClient("--my-database-id--", "--db-private-token--").setRegion(Region.US_WEST);
4363
try {
4464

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
<project xmlns="http://maven.apache.org/POM/4.0.0"
2+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
<parent>
6+
<groupId>com.recombee</groupId>
7+
<artifactId>api-client-parent</artifactId>
8+
<version>4.2.0-SNAPSHOT</version>
9+
</parent>
10+
<artifactId>api-client-spring-boot-2-autoconfigure</artifactId>
11+
<name>Recombee API Client Spring Boot 2 Autoconfiguration</name>
12+
13+
<properties>
14+
<dependency.springboot.version>${spring.boot.2.version}</dependency.springboot.version>
15+
</properties>
16+
17+
<dependencyManagement>
18+
<dependencies>
19+
<dependency>
20+
<groupId>org.springframework.boot</groupId>
21+
<artifactId>spring-boot-dependencies</artifactId>
22+
<version>${dependency.springboot.version}</version>
23+
<type>pom</type>
24+
<scope>import</scope>
25+
</dependency>
26+
</dependencies>
27+
</dependencyManagement>
28+
29+
<dependencies>
30+
<dependency>
31+
<groupId>org.springframework.boot</groupId>
32+
<artifactId>spring-boot-autoconfigure</artifactId>
33+
</dependency>
34+
<dependency>
35+
<groupId>com.recombee</groupId>
36+
<artifactId>api-client</artifactId>
37+
<optional>true</optional>
38+
</dependency>
39+
<dependency>
40+
<groupId>org.springframework.boot</groupId>
41+
<artifactId>spring-boot-configuration-processor</artifactId>
42+
<optional>true</optional>
43+
</dependency>
44+
<dependency>
45+
<groupId>org.springframework.boot</groupId>
46+
<artifactId>spring-boot-starter-validation</artifactId>
47+
<optional>true</optional>
48+
</dependency>
49+
50+
<dependency>
51+
<groupId>org.springframework.boot</groupId>
52+
<artifactId>spring-boot-starter-test</artifactId>
53+
<scope>test</scope>
54+
</dependency>
55+
</dependencies>
56+
</project>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.recombee.api_client.spring.boot._2.autoconfiguration;
2+
3+
import org.springframework.boot.autoconfigure.AutoConfiguration;
4+
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
5+
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
6+
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
7+
import org.springframework.boot.context.properties.ConfigurationProperties;
8+
import org.springframework.context.annotation.Bean;
9+
10+
import com.recombee.api_client.RecombeeClient;
11+
12+
@AutoConfiguration
13+
@ConditionalOnClass(RecombeeClient.class)
14+
@ConditionalOnProperty(prefix = RecombeeClientAutoconfiguration.DEFAULT_RECOMBEE_CLIENT_PROPERTIES_PREFIX, name = "enabled", matchIfMissing = true)
15+
public class RecombeeClientAutoconfiguration {
16+
17+
public static final String DEFAULT_RECOMBEE_CLIENT_PROPERTIES_PREFIX = "com.recombee.client";
18+
19+
@Bean
20+
@ConditionalOnMissingBean
21+
@ConfigurationProperties(DEFAULT_RECOMBEE_CLIENT_PROPERTIES_PREFIX)
22+
RecombeeClientProperties recombeeClientProperties() {
23+
return new RecombeeClientProperties();
24+
}
25+
26+
@Bean
27+
@ConditionalOnMissingBean
28+
RecombeeClient recombeeClient(RecombeeClientProperties recombeeClientProperties) {
29+
return new RecombeeClient(recombeeClientProperties.getDatabaseId(),
30+
recombeeClientProperties.getToken()).setRegion(recombeeClientProperties.getRegion());
31+
}
32+
33+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package com.recombee.api_client.spring.boot._2.autoconfiguration;
2+
3+
import javax.validation.constraints.NotBlank;
4+
import javax.validation.constraints.NotNull;
5+
6+
import org.springframework.validation.annotation.Validated;
7+
8+
import com.recombee.api_client.util.Region;
9+
10+
@Validated
11+
public class RecombeeClientProperties {
12+
@NotBlank
13+
private String databaseId;
14+
@NotBlank
15+
private String token;
16+
@NotNull
17+
private Region region;
18+
19+
public RecombeeClientProperties() {
20+
// empty no-args constructor
21+
}
22+
23+
public RecombeeClientProperties(@NotBlank String databaseId, @NotBlank String token, @NotNull Region region) {
24+
this.databaseId = databaseId;
25+
this.token = token;
26+
this.region = region;
27+
}
28+
29+
public String getDatabaseId() {
30+
return databaseId;
31+
}
32+
33+
public void setDatabaseId(String databaseId) {
34+
this.databaseId = databaseId;
35+
}
36+
37+
public String getToken() {
38+
return token;
39+
}
40+
41+
public void setToken(String token) {
42+
this.token = token;
43+
}
44+
45+
public Region getRegion() {
46+
return region;
47+
}
48+
49+
public void setRegion(Region region) {
50+
this.region = region;
51+
}
52+
53+
}
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
2+
com.recombee.api_client.spring.boot._2.autoconfiguration.RecombeeClientAutoconfiguration
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
com.recombee.api_client.spring.boot._2.autoconfiguration.RecombeeClientAutoconfiguration
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.recombee.api_client.spring.boot._2.autoconfiguration;
2+
3+
import static org.junit.Assert.assertNotNull;
4+
5+
import org.junit.Test;
6+
import org.junit.runner.RunWith;
7+
import org.springframework.beans.factory.annotation.Autowired;
8+
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
9+
import org.springframework.boot.test.context.SpringBootTest;
10+
import org.springframework.context.annotation.Configuration;
11+
import org.springframework.test.context.ActiveProfiles;
12+
import org.springframework.test.context.junit4.SpringRunner;
13+
14+
import com.recombee.api_client.RecombeeClient;
15+
import com.recombee.api_client.spring.boot._2.autoconfiguration.RecombeeClientAutoconfigurationTest.TestConfig;
16+
17+
@RunWith(SpringRunner.class)
18+
@SpringBootTest(classes = TestConfig.class)
19+
@ActiveProfiles("test")
20+
public class RecombeeClientAutoconfigurationTest {
21+
22+
@Configuration
23+
// @SpringBootApplication
24+
@EnableAutoConfiguration
25+
public static class TestConfig {
26+
}
27+
28+
@Autowired
29+
private RecombeeClient client;
30+
31+
@Test
32+
public void testAutoConfigurationExecutes() {
33+
assertNotNull(client);
34+
}
35+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
com.recombee.client.database-id=my-database-id
2+
com.recombee.client.token=db-private-token
3+
com.recombee.client.region=US_WEST
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
<project xmlns="http://maven.apache.org/POM/4.0.0"
2+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3+
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4+
<modelVersion>4.0.0</modelVersion>
5+
<parent>
6+
<groupId>com.recombee</groupId>
7+
<artifactId>api-client-parent</artifactId>
8+
<version>4.2.0-SNAPSHOT</version>
9+
</parent>
10+
<artifactId>api-client-spring-boot-2-starter</artifactId>
11+
<name>Recombee API Client Spring Boot 2 Starter</name>
12+
<packaging>pom</packaging>
13+
14+
<properties>
15+
<dependency.springboot.version>${spring.boot.2.version}</dependency.springboot.version>
16+
</properties>
17+
18+
<dependencyManagement>
19+
<dependencies>
20+
<dependency>
21+
<groupId>org.springframework.boot</groupId>
22+
<artifactId>spring-boot-dependencies</artifactId>
23+
<version>${dependency.springboot.version}</version>
24+
<type>pom</type>
25+
<scope>import</scope>
26+
</dependency>
27+
</dependencies>
28+
</dependencyManagement>
29+
30+
<dependencies>
31+
<dependency>
32+
<groupId>com.recombee</groupId>
33+
<artifactId>api-client-spring-boot-2-autoconfigure</artifactId>
34+
</dependency>
35+
<dependency>
36+
<groupId>com.recombee</groupId>
37+
<artifactId>api-client</artifactId>
38+
</dependency>
39+
</dependencies>
40+
</project>

0 commit comments

Comments
 (0)