From 489c250eddbabcc3172e41be30defc9076b49282 Mon Sep 17 00:00:00 2001 From: em Date: Tue, 25 Sep 2018 13:49:23 +0200 Subject: [PATCH] add docker based development with src watcher --- README.md | 22 ++++++++-- docker-compose.yml | 15 +++++++ makefile | 6 +++ .../converter/ConverterApplication.java | 27 +++++++++++- .../converter/config/Profiles.java | 7 --- .../converter/config/SwaggerConfig.java | 43 ------------------- .../controller/ConversionRestController.java | 4 +- start.sh | 3 ++ wach.sh | 2 + 9 files changed, 74 insertions(+), 55 deletions(-) create mode 100644 docker-compose.yml delete mode 100644 src/main/java/de/kontextwork/converter/config/Profiles.java delete mode 100644 src/main/java/de/kontextwork/converter/config/SwaggerConfig.java create mode 100755 start.sh create mode 100644 wach.sh diff --git a/README.md b/README.md index 332e740..1555153 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ This project is basically an extended version of [jodconverter-sample-rest](http You can use this project as is using docker with `eugenmayer/kontextwork-converter` or build it here yourself. -## build +## Build local java build, when you have all the build tools present + libreoffice locally installed @@ -29,14 +29,30 @@ or better use the docker image with all included, no dev tools/LO needed locally # or dev mode with swagger and a debugger on 5001 docker run --memory 512m --name converter-dev --rm -p 5001:5001 -p 8080:8080 eugenmayer/kontextwork-converter:development +## Development + +You can either use the IDE task or the local gradle + + ./gradlew -Pdev bootRun + +Or even better, use the development container. You will not need any LibreOffice/Gradle installed locally + + make start-src # basically just docker-compose up + +This fires up a docker container, mounts your source. To auto-rebuild and auto-restart he app very quick do this + + make watch + # or just run ./watch.sh localy + ## Debugging Of course you can just start using your IDE and debug that, but if you want to debug inside the docker container make start -And now connect(attach) to localhost 8000 for debugging `eugenmayer/kontextwork-converter:development` has a default remote -debugging port enabled on 8000 +And now connect(attach) to localhost 5001 for debugging `eugenmayer/kontextwork-converter:development` has a default remote +debugging port enabled on 5001 + ## REST endpoints Start the project and access `http://localhost:8080/swagger-ui.html` to browse, inspect and try the REST endpoints. diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..477ac94 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,15 @@ +version: "2" + +services: + app: + container_name: converter-dev + image: eugenmayer/kontextwork-converter:development + working_dir: /src + entrypoint: ./gradlew + command: -Pdev bootRun + volumes: + - ./:/src + ports: + - 5001:5001 + - 8080:8080 + mem_limit: 512M \ No newline at end of file diff --git a/makefile b/makefile index d55156d..a024378 100644 --- a/makefile +++ b/makefile @@ -7,6 +7,12 @@ push: docker push eugenmayer/kontextwork-converter:development docker push eugenmayer/kontextwork-converter:production +start-src: stop + ./start.sh + +watch: + ./watch.sh + start: stop # 5001 is the remote debugger port, which we enable by default docker run -m 512m --name converter-dev --rm -p 5001:5001 -p 8080:8080 eugenmayer/kontextwork-converter:development diff --git a/src/main/java/de/kontextwork/converter/ConverterApplication.java b/src/main/java/de/kontextwork/converter/ConverterApplication.java index 8a3196f..f279638 100644 --- a/src/main/java/de/kontextwork/converter/ConverterApplication.java +++ b/src/main/java/de/kontextwork/converter/ConverterApplication.java @@ -12,7 +12,6 @@ import springfox.documentation.spi.DocumentationType; import springfox.documentation.spring.web.plugins.Docket; import springfox.documentation.swagger2.annotations.EnableSwagger2; - import java.util.Collections; @SpringBootApplication @@ -21,5 +20,31 @@ public class ConverterApplication { public static void main(String[] args) { SpringApplication.run(ConverterApplication.class, args); } + @Configuration + @EnableSwagger2 + @Profile("dev") + public class SwaggerConfig { + @Bean + public Docket api() { + return new Docket(DocumentationType.SWAGGER_2) + .useDefaultResponseMessages(false) + .select() + .apis(RequestHandlerSelectors.basePackage("de.kontextwork.converter")) + .paths(PathSelectors.regex("/conversion.*")) + .build() + .apiInfo(apiInfo()); + } + private ApiInfo apiInfo() { + return new ApiInfo( + "Conversion REST API", + "Conversion REST API for Online conversion. Automates conversions between office document formats using JODconverter, LibreOffice or Apache OpenOffice.", + "0.1", + "Terms of service", + new Contact("No", "kontextwork.de", "no@kontextwork.de"), + "Unknown", + "Unknown", + Collections.emptyList()); + } + } } diff --git a/src/main/java/de/kontextwork/converter/config/Profiles.java b/src/main/java/de/kontextwork/converter/config/Profiles.java deleted file mode 100644 index 989b6c1..0000000 --- a/src/main/java/de/kontextwork/converter/config/Profiles.java +++ /dev/null @@ -1,7 +0,0 @@ -package de.kontextwork.converter.config; - -public class Profiles { - static final String PROD = "prod"; - static final String DEV = "dev"; - static final String TEST = "test"; -} diff --git a/src/main/java/de/kontextwork/converter/config/SwaggerConfig.java b/src/main/java/de/kontextwork/converter/config/SwaggerConfig.java deleted file mode 100644 index b9de7c7..0000000 --- a/src/main/java/de/kontextwork/converter/config/SwaggerConfig.java +++ /dev/null @@ -1,43 +0,0 @@ -package de.kontextwork.converter.config; - - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Profile; -import springfox.documentation.builders.PathSelectors; -import springfox.documentation.builders.RequestHandlerSelectors; -import springfox.documentation.service.ApiInfo; -import springfox.documentation.service.Contact; -import springfox.documentation.spi.DocumentationType; -import springfox.documentation.spring.web.plugins.Docket; -import springfox.documentation.swagger2.annotations.EnableSwagger2; - -import java.util.Collections; - -@Configuration -@EnableSwagger2 -@Profile(Profiles.DEV) -public class SwaggerConfig { - @Bean - public Docket api() { - return new Docket(DocumentationType.SWAGGER_2) - .useDefaultResponseMessages(false) - .select() - .apis(RequestHandlerSelectors.basePackage("de.kontextwork.converter")) - .paths(PathSelectors.regex("/conversion/.*")) - .build() - .apiInfo(apiInfo()); - } - - private ApiInfo apiInfo() { - return new ApiInfo( - "Conversion REST API", - "Conversion REST API for Online conversion. Automates conversions between office document formats using JODconverter, LibreOffice or Apache OpenOffice.", - "0.1", - "Terms of service", - new Contact("No", "kontextwork.de", "no@kontextwork.de"), - "Unknown", - "Unknown", - Collections.emptyList()); - } -} \ No newline at end of file diff --git a/src/main/java/de/kontextwork/converter/controller/ConversionRestController.java b/src/main/java/de/kontextwork/converter/controller/ConversionRestController.java index 45880be..8c5d873 100644 --- a/src/main/java/de/kontextwork/converter/controller/ConversionRestController.java +++ b/src/main/java/de/kontextwork/converter/controller/ConversionRestController.java @@ -21,10 +21,11 @@ @RestController @RequestMapping("/conversion") public class ConversionRestController { + //, produces = MediaType.APPLICATION_OCTET_STREAM_VALUE @Autowired private ConverterService converterService; - //, produces = MediaType.APPLICATION_OCTET_STREAM_VALUE + @RequestMapping(path = "", method = RequestMethod.POST) public ResponseEntity convert(@RequestParam(name="format", defaultValue = "pdf") final String targetFormatExt, @RequestParam("data") final MultipartFile inputMultipartFile) throws IOException, OfficeException { if (!converterService.validateFormat(targetFormatExt)) { @@ -41,3 +42,4 @@ public ResponseEntity convert(@RequestParam(name="format", defaultValue = "pd return ResponseEntity.ok().headers(headers).body(convertedFile.toByteArray()); } } + diff --git a/start.sh b/start.sh new file mode 100755 index 0000000..c92694e --- /dev/null +++ b/start.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +docker-compose up "$@" \ No newline at end of file diff --git a/wach.sh b/wach.sh new file mode 100644 index 0000000..3024fe9 --- /dev/null +++ b/wach.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +docker exec --workdir /src converter-dev ./gradlew build --continuous \ No newline at end of file