Skip to content

Commit 55f71a8

Browse files
committed
feat: restclient
1 parent b99fc4b commit 55f71a8

File tree

5 files changed

+35
-15
lines changed

5 files changed

+35
-15
lines changed

backend/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ dependencies {
4040
implementation 'net.javacrumbs.shedlock:shedlock-provider-jdbc-template:5.2.0'
4141
implementation 'org.springframework.ai:spring-ai-pgvector-store-spring-boot-starter:0.8.1-SNAPSHOT'
4242
implementation 'org.springframework.ai:spring-ai-transformers-spring-boot-starter:0.8.1-SNAPSHOT'
43+
implementation 'org.apache.httpcomponents.client5:httpclient5'
4344
testImplementation 'org.springframework.boot:spring-boot-starter-test'
4445
testImplementation 'org.springframework.security:spring-security-test'
4546
testImplementation 'com.tngtech.archunit:archunit-junit5:1.1.0'

backend/src/main/java/ch/xxx/aidoclibchat/adapter/client/ImportRestClient.java

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -41,17 +41,18 @@
4141
public class ImportRestClient implements ImportClient {
4242
private final CsvMapper csvMapper;
4343
private final TableMapper tableMapper;
44+
private final RestClient restClient;
4445

45-
public ImportRestClient(TableMapper tableMapper) {
46+
public ImportRestClient(TableMapper tableMapper, RestClient restClient) {
4647
this.tableMapper = tableMapper;
48+
this.restClient = restClient;
4749
this.csvMapper = new CsvMapper();
4850
this.csvMapper.registerModule(new JavaTimeModule());
4951
}
5052

5153
@Override
5254
public List<Artist> importArtists() {
53-
RestClient restClient = RestClient.create();
54-
String result = restClient.get().uri(
55+
String result = this.restClient.get().uri(
5556
"https://raw.githubusercontent.com/Angular2Guy/AIDocumentLibraryChat/master/museumDataset/artist.csv")
5657
.retrieve().body(String.class);
5758
return this.mapString(result, ArtistDto.class).stream().map(myDto -> this.tableMapper.map(myDto)).toList();
@@ -70,44 +71,39 @@ private <T> List<T> mapString(String result, Class<T> myClass) {
7071

7172
@Override
7273
public List<Museum> importMuseums() {
73-
RestClient restClient = RestClient.create();
74-
String result = restClient.get().uri(
74+
String result = this.restClient.get().uri(
7575
"https://raw.githubusercontent.com/Angular2Guy/AIDocumentLibraryChat/master/museumDataset/museum.csv")
7676
.retrieve().body(String.class);
7777
return this.mapString(result, MuseumDto.class).stream().map(myDto -> this.tableMapper.map(myDto)).toList();
7878
}
7979

8080
@Override
8181
public List<MuseumHours> importMuseumHours() {
82-
RestClient restClient = RestClient.create();
83-
String result = restClient.get().uri(
82+
String result = this.restClient.get().uri(
8483
"https://raw.githubusercontent.com/Angular2Guy/AIDocumentLibraryChat/master/museumDataset/museum_hours.csv")
8584
.retrieve().body(String.class);
8685
return this.mapString(result, MuseumHoursDto.class).stream().map(myDto -> this.tableMapper.map(myDto)).toList();
8786
}
8887

8988
@Override
9089
public List<Work> importWorks() {
91-
RestClient restClient = RestClient.create();
92-
String result = restClient.get().uri(
90+
String result = this.restClient.get().uri(
9391
"https://raw.githubusercontent.com/Angular2Guy/AIDocumentLibraryChat/master/museumDataset/work.csv")
9492
.retrieve().body(String.class);
9593
return this.mapString(result, WorkDto.class).stream().map(myDto -> this.tableMapper.map(myDto)).toList();
9694
}
9795

9896
@Override
9997
public List<Subject> importSubjects() {
100-
RestClient restClient = RestClient.create();
101-
String result = restClient.get().uri(
98+
String result = this.restClient.get().uri(
10299
"https://raw.githubusercontent.com/Angular2Guy/AIDocumentLibraryChat/master/museumDataset/subject.csv")
103100
.retrieve().body(String.class);
104101
return this.mapString(result, SubjectDto.class).stream().map(myDto -> this.tableMapper.map(myDto)).toList();
105102
}
106103

107104
@Override
108105
public List<WorkLink> importWorkLinks() {
109-
RestClient restClient = RestClient.create();
110-
String result = restClient.get().uri(
106+
String result = this.restClient.get().uri(
111107
"https://raw.githubusercontent.com/Angular2Guy/AIDocumentLibraryChat/master/museumDataset/work_link.csv")
112108
.retrieve().body(String.class);
113109
return this.mapString(result, WorkLinkDto.class).stream().map(myDto -> this.tableMapper.map(myDto)).toList();

backend/src/main/java/ch/xxx/aidoclibchat/adapter/client/OpenLibraryRestClient.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,12 @@
2929
public class OpenLibraryRestClient implements OpenLibraryClient {
3030
private static final Logger LOGGER = LoggerFactory.getLogger(OpenLibraryRestClient.class);
3131
private final String baseUrl = "https://openlibrary.org/search.json";
32-
32+
private final RestClient restClient;
33+
34+
public OpenLibraryRestClient(RestClient restClient) {
35+
this.restClient = restClient;
36+
}
37+
3338
@Override
3439
public Response apply(Request request) {
3540
var authorOpt = this.createParamOpt(request.author(), "author");
@@ -40,7 +45,7 @@ public Response apply(Request request) {
4045
var urlStr =
4146
String.format("%s?%s", this.baseUrl, paramsStr);
4247
LOGGER.info(urlStr);
43-
var response = RestClient.create().get().uri(urlStr).retrieve().body(Response.class);
48+
var response = this.restClient.get().uri(urlStr).retrieve().body(Response.class);
4449
return response;
4550
}
4651

backend/src/main/java/ch/xxx/aidoclibchat/adapter/config/ApplicationConfig.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,19 @@
1717

1818
import java.util.function.Function;
1919

20+
import org.apache.hc.client5.http.config.RequestConfig;
21+
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
22+
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
23+
import org.apache.hc.core5.util.Timeout;
2024
import org.springframework.context.annotation.Bean;
2125
import org.springframework.context.annotation.Configuration;
26+
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
2227
import org.springframework.scheduling.annotation.EnableAsync;
28+
import org.springframework.web.client.RestClient;
2329

2430
import ch.xxx.aidoclibchat.domain.client.OpenLibraryClient;
2531

32+
2633
@Configuration
2734
@EnableAsync
2835
public class ApplicationConfig {
@@ -43,4 +50,14 @@ public ApplicationConfig(OpenLibraryClient openLibraryClient) {
4350
public Function<OpenLibraryClient.Request, OpenLibraryClient.Response> openLibraryClient() {
4451
return this.openLibraryClient::apply;
4552
}
53+
54+
@Bean
55+
public RestClient createRestClient() {
56+
RequestConfig requestConfig = RequestConfig.custom().setResponseTimeout(Timeout.ofMilliseconds(5000)).build();
57+
CloseableHttpClient httpClient = HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).build();
58+
var factory = new HttpComponentsClientHttpRequestFactory(httpClient);
59+
factory.setConnectTimeout(2000);
60+
factory.setConnectionRequestTimeout(2000);
61+
return RestClient.builder().requestFactory(factory).build();
62+
}
4663
}

runOllama.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ docker exec -it ollama ollama run stable-beluga:13bc
88
#docker exec -it ollama ollama run sqlcoder:15b
99
#docker exec -it ollama ollama run mixtral:8x7b-text-v0.1-q6_K
1010
#docker exec -it ollama ollama run llava:34b-v1.6-q6_K
11+
#docker exec -it ollama ollama run granite-code:20b
1112
#docker exec -it ollama bash

0 commit comments

Comments
 (0)