{"id":21714857,"url":"https://github.com/zevolution/spring-distributed-job-jobrunr","last_synced_at":"2026-05-20T19:02:20.211Z","repository":{"id":172314842,"uuid":"649129522","full_name":"zevolution/spring-distributed-job-jobrunr","owner":"zevolution","description":null,"archived":false,"fork":false,"pushed_at":"2023-06-03T21:54:44.000Z","size":18,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-20T19:36:20.874Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/zevolution.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-06-03T21:52:49.000Z","updated_at":"2023-06-03T21:54:48.000Z","dependencies_parsed_at":null,"dependency_job_id":"f09a2879-eb65-4474-9374-1aba957ace56","html_url":"https://github.com/zevolution/spring-distributed-job-jobrunr","commit_stats":null,"previous_names":["zevolution/spring-distributed-job-jobrunr"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/zevolution/spring-distributed-job-jobrunr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zevolution%2Fspring-distributed-job-jobrunr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zevolution%2Fspring-distributed-job-jobrunr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zevolution%2Fspring-distributed-job-jobrunr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zevolution%2Fspring-distributed-job-jobrunr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/zevolution","download_url":"https://codeload.github.com/zevolution/spring-distributed-job-jobrunr/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/zevolution%2Fspring-distributed-job-jobrunr/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33271453,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-20T15:12:43.734Z","status":"ssl_error","status_checked_at":"2026-05-20T15:12:42.300Z","response_time":356,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-26T00:39:11.635Z","updated_at":"2026-05-20T19:02:20.173Z","avatar_url":"https://github.com/zevolution.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Microservice Chassis Spring Boot\nEste projeto é um microservice chassis e pode ser utilizado como base na criação de novos microserviços.\n\nEste chassis foi criado a partir das necessidades basicas de um microserviço, com cliente HTTP e persistência em banco de dados. \nConforme a necesside, libs que fizerem necessárias ao cenário do seu projeto poderão ser adicionadas ou removidas.\n\n# Arquitetura\nUtilizamos como base, a implementação da arquitetura hexagonal proposta pela Netflix, conheça um pouco mais clicando [aqui](https://netflixtechblog.com/ready-for-changes-with-hexagonal-architecture-b315ec967749).\n\nO modelo proposto pela Netflix, possui um isolamento baseado em dois conceitos, sendo eles: business-logic e adapters. Dado esse conceito,\nfizemos uma pequena modificação isolando os pacotes que fazem parte do business-logic no pacote `internal`, e os pacotes de fronteiras dentro do pacote `adapter`.\n\nAbaixo, breve descrição da responsabilidade de cada camada.\n\n- **Transport Layer**: É a camada a qual aciona uma regra de negócio, sendo reponsável pela entrada de dados do mundo externo, para nossa aplicação.\nAqui podem ficar nossos http providers, como por exemplo REST e GraphQL. Ou até mesmo consumers de message brokers como AWS SQS Listeners, Kafka Consumer e Redis Subscribers. \n  \n- **Interactor**: Responsável por parte da lógica de negócio, recebe os dados da camada de transport e delega, se necessário, para a camada de datasource. \n\n- **Entities**: Responsável por mapear o nosso dominio e parte da lógica de negócio junto aos interactors. Devendo a todo custo\nevitar dependências de frameworks e libs externas, ex: Lombok, notações Spring e etc.\n\n- **Datasource**: É a camada que recebe um acionamento vindo de uma regra de negócio, responsável por direcionar o conteúdo\npara a fonte de dados correta, podendo ser um AWS SQS Producer, AWS S3, arquivos CSV em disco, etc. *Esta camada pode ter mais de uma implementação.*\n\n```markdown\n📦 src\n┣ 📦 main/java/dev/zevolution/netflixhexaarch\n┃ ┣ 📂 adapter: Adaptadores responsavéis por acionar ou serem acionados a partir de eventos externos ou do bussiness-logic\n┃ ┃ ┣ 📂 datasources: Todas as fontes de dados utilizadas pela aplicação\n┃ ┃ ┃ ┣ 📂 services: Serviço que podem vir a ser utilizados pelas fontes de dados, ex: uma class Feign Client\n┃ ┃ ┃ ┃ ┣ 📂 data: DTO's de request e response utilizados pelos services acima\n┃ ┃ ┃ ┃ ┃ ┣ 📂 request:\n┃ ┃ ┃ ┃ ┃ ┣ 📂 response:\n┃ ┃ ┃ ┃ ┣ 📂 mapper: Classes mapeadores, responsáveis por mapear os DTO's dos services, para entidades do bussiness-logic(internal)\n┃ ┃ ┃ ┃ ┣ 📂 model: Classes responsáveis por mapear as entidades de banco de dados, aqui, podemos utilizar anotações como @Entity, @Column, etc...\n┃ ┃ ┣ 📂 properties: Classes responsáveis por mapear properties existentes no application.yml\n┃ ┃ ┣ 📂 transportlayers: Todas as fontes para entrada de dados na nossa aplicação, ex: Controllers, Consumers, Socket, etc ...\n┃ ┃ ┃ ┣ 📂 mapper: Classes mapeadores, responsáveis por mapear os DTO's da transportlayer, para entidades do bussiness-logic(internal) e vice-versa\n┃ ┃ ┃ ┣ 📂 restapi(example): Exemplo de onde podemos adicionar nossos Controllers\n┃ ┃ ┃ ┣ 📂 messagebrokers(example): Exemplo de onde podemos adicionar nossos Listeners, Consumers e Subscribers\n┃ ┃ ┃ ┣ 📂 graphql(example): Exemplo de onde podemos adicionar nossos Controllers\n┃ ┣ 📂 bootstrap: Classes de configuração da aplicação\n┃ ┃ ┣ 📂 exceptions: Exceções da aplicação, podendo ser compartilhada entre camadas\n┃ ┣ 📂 internal: Contem tudo relacionado a Business-Logic\n┃ ┃ ┣ 📂 entities: Classes utilizadas para mapeamento do nosso negócio/dominio\n┃ ┃ ┣ 📂 interactors: Classes responsável por regras de negócio especificas\n┃ ┃ ┣ 📂 properties: Classes responsáveis por mapear properties existentes no application.yml\n┃ ┃ ┣ 📂 repositories: Interfaces responsáveis por especificar para o datasource, qual o input e retorno exigido pelo nosso domínio \n┃ ┗ 📜 Application.java: Classe inicializadora\n┣ 📦 main/resources\n┃ ┣ 📜 application.yml\n┃ ┣ 📜 bootstrap.yml\n┃ ┗ 📜 openapi.yml\n┣ 📜 .gitignore\n┣ 📜 Dockerfile\n┣ 📜 pom.xml\n┗ 📜 README.MD\n```\n\n# Tecnologias\nFoi utilizado na criação deste chassis bibliotecas como: \n\n- [Java 11](https://openjdk.java.net/projects/jdk/11/)\n- [Maven](https://maven.apache.org/)\n- [Spring-Boot 2.5.0](https://docs.spring.io/spring-boot/docs/2.2.2.RELEASE/reference/htmlsingle/)\n- [SpringFox 2.9.2](https://springfox.github.io/springfox/docs/2.9.2)\n- [MapStruct](https://mapstruct.org/documentation/stable/reference/html/)\n- [OpenFeign](https://spring.io/projects/spring-cloud-openfeign)\n- [JUnit 5](https://junit.org/junit5/docs/current/user-guide/)\n- [OpenAPI Generator](https://github.com/OpenAPITools/openapi-generator)\n    * O chassis está gerando o código a partir da especificação em `src/main/resources/openapi.yml`\n- [Micrometer Registry Prometheus](https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#actuator.metrics.getting-started)\n\n# Build\nAntes de subir a aplicação, execute o comando `mvn clean install` ou mesmo o comando `mvn clean generate-sources` para gerar os stubs\nutilizando OpenAPI-Generator-Tools, a partir do arquivo `openapi.yml`.\n\n# URLs\n - Documentação swagger do próprio chassis: `http://localhost:8080/project-artifact/swagger-ui/`\n - Spring Actuator: `http://localhost:9090/actuator`\n - Métricas prometheus: `http://localhost:9090/actuator/prometheus`\n\n# Exemplos de implementação\n- [Transport RESTAPI | Datasource Feign Client](https://github.com/zevolution/netflix-hexagonal-architecture)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzevolution%2Fspring-distributed-job-jobrunr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fzevolution%2Fspring-distributed-job-jobrunr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fzevolution%2Fspring-distributed-job-jobrunr/lists"}