Primavera + Firebird + REST. Parte 1 Configuração do projeto

Em vez de se juntar


Se você estiver analisando algo, tente descrevê-lo em uma linguagem clara e encontre alguém que leia e faça comentários (reformulado R. Feynman, mas sim, sim).
Todos os comentários, até cruéis no estilo de "Sim, que isso ~ branco ~~ pessoas permite-se "bem-vindo.


Objetivos


Aplicativos - exibindo relatórios sobre o andamento do produto (escalas), se possível, com a distribuição desses dados pela rede dentro da empresa (para funcionalidade);
Pessoal - um pouco de compreensão da tecnologia de molas


Tecnologia


  • Teia de primavera
  • Spring jpa
  • Lombok
    • Thymeleaf
  • SpringFox Swagger (testarei o resto)
  • jaybird-jdk17, versão 3.0.5
  • Maven

Motivação gash spring + firebird


Recentemente, foi feito o primeiro lugar de cliente no Linux Mint para o operador Ovsezavod e a exibição de relatórios do Wine nem sempre era adequada. (tudo funciona bem - visualização Qt - arquivos SCADA, Java SE).


Algum ancinho que teve que ser pisado


  1. dependências jackson de diferentes versões (fixas),
  2. O firebird não define o tipo de codificação leva ao padrão NENHUM,

Link para git no final da publicação.


Jackson e todos todos todos


Diferentes componentes apertaram jackson de versões diferentes, pois é desagradável, é necessário corrigi-lo.
Revelado pela equipe


mvn dependency:tree -Dincludes=com.fasterxml.jackson.core +- org.springframework.boot:spring-boot-starter-web:jar:2.1.0.RELEASE:compile [INFO] | \- org.springframework.boot:spring-boot-starter-json:jar:2.1.0.RELEASE:compile [INFO] | \- com.fasterxml.jackson.core:jackson-databind:jar:2.9.7:compile [INFO] \- io.springfox:springfox-swagger2:jar:2.7.0:compile [INFO] \- io.swagger:swagger-models:jar:1.5.13:compile [INFO] \- com.fasterxml.jackson.core:jackson-annotations:jar:2.8.5:compile 

Fixamos em pom.


  <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.7</version> <exclusions> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> </exclusion> <exclusion> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> </exclusion> </exclusions> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.7</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.7</version> </dependency> 

Corrigido, aprox. acabou. Se você estiver usando o IDEA, será ainda mais fácil ver as bibliotecas externas . Que existem todas as dependências e são as versões corretas.


Estrutura geral da aplicação


Não estou familiarizado com o teste de inicialização por mola do aplicativo, por isso farei isso sem testes
("Sim, essa # cor da pele se permite").


Configuração da aplicação


Como sou um desenvolvedor experiente e, portanto, não estou familiarizado com os métodos estabelecidos, farei:


  1. em application.yml (ao configurar uma conexão com o banco de dados)
     spring: datasource: driver-class-name: org.firebirdsql.jdbc.FBDriver url: jdbc:firebirdsql://host:3050//work/cmn/db/namedb.fdb?sql_dialect=3&charSet=utf-8 username: ****** password: ****** useUnicode: true characterEncoding: UTF-8 sql-script-encoding: UTF-8 jpa: show-sql: true 
  2. usando anotações diretamente nas classes:

Se você não especificar charSet = utf-8, o padrão será NONE : Caso as tabelas também não possuam NONE, obteremos caracteres ilegíveis ou, de acordo com firebirdsql.org:


 3.2.4 How can I solve the error “Connection rejected: No connection character set specified” If no character set has been set, Jaybird 3.0 will reject the connection with an SQLNonTransientConnectionException with message “Connection rejected: No connection character set specified (property lc_ctype, encoding, charSet or localEncoding). Please specify a connection character set (eg property charSet=utf-8) or consult the Jaybird documentation for more information.” 

Conjunto mínimo de classes e arquivos


Para começar, index.html contém um corpo vazio;
Em execução na API está o Swagger, cujas configurações de (infra) pacote são colocadas em um nível com o restante do pacote do projeto.



Adicione ao projeto:


  • modelo de embalagem
    • clacc CModule - também conhecido como Data (getter, setter para membros, graças a Lombok pelo mínimo "código de macaco"), também conhecido como Entity (a essência de uma tabela de banco de dados);
  • repositório de pacotes
    • a interface CModuleRepository estende JpaRepository <CModule, String> (selecionará dados do banco de dados) e, por enquanto, nada precisa ser adicionado a ele (como Query );
  • serviços de pacotes;
    • classe CModuleService - aka Service e @Transactional (readOnly = true) por trabalhar com o repositório;
  • recursos do pacote
    • classe CModulesResource - também conhecida como @RestController, @RequestMapping ("/ modules") será responsável por acessar esse endereço. O corpo de resposta fará isso você mesmo (para nós, será assim)

Trabalharemos com a API RestController de todas as formas, indicamos isso ao Swagger:


 @Configuration @EnableSwagger2 public class SwaggerConfiguration { @Bean public Docket documentation(){ return new Docket(DocumentationType.SWAGGER_2) .select() .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class)) .paths(PathSelectors.any()) .build(); } } 

Crie uma classe executando o Aplicativo Spring:


 @SpringBootApplication public class App { public static void main(String[] args) { SpringApplication.run(App.class,args); } } 

Modelos, repositórios, solicitação são criados para a tabela desejada (eu tenho módulos):
agora você pode assumir @RestController


 @RestController @RequestMapping("/modules") @Api(tags = "Modules", description = "Modules API") public class CModulesResource { .... @GetMapping(value = "/{name}") @ApiOperation(value = "Find module",notes = "Find the module by Name") @ApiResponses(value = { @ApiResponse(code = 200,message = "Modules found"), @ApiResponse(code = 404,message = "Modules not found"), }) 

Api - o nome da classe com uma descrição;
Nome do método @ApiOperation com descrição;
@ApiResponses retornou códigos de API;
Código específico do @ApiResponse com uma descrição;


Exemplo (sim, ele ainda contém a entidade principal, que não descrevo no artigo)


Agora você pode testar a seleção de dados usando a API REST.


Lista de literatura usada:


 1. https://www.baeldung.com 2. https://docs.spring.io 3. Spring in Action, 5th Edition 4. https://www.firebirdsql.org/file/documentation/drivers_documentation/java/faq.html#how-can-i-solve-the-error-connection-rejected-no-connection-character-set-specified 

githublink


Projeto Github

Source: https://habr.com/ru/post/pt432244/


All Articles