Skip to content

Instantly share code, notes, and snippets.

@diyfr
Last active July 13, 2020 06:39
Show Gist options
  • Save diyfr/5cf79e9a444ec1541915ad9085d045b2 to your computer and use it in GitHub Desktop.
Save diyfr/5cf79e9a444ec1541915ad9085d045b2 to your computer and use it in GitHub Desktop.
Ajouter la persistence à un projet SpringBoot généré avec OpenApiGenerator (4.0.3)

Editer le POM et y ajouter JPA + Driver (postgresql)

  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-jpa</artifactId>
  </dependency>
  <dependency>
      <groupId>org.postgresql</groupId>
      <artifactId>postgresql</artifactId>
      <version>42.2.6</version>
  </dependency>

Sur les entités ajouter les annotations JPA sur l'entête de la classe

@Entity
@Table(name="mon_objet")

Sur votre identifiant technique de votre entité

    @JsonProperty("techId")
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "commande_id_tech")
    private long techId;

N'oubliez pas d'ajouter l'annotation @Column sur les propriétés de vos entités Ajouter un repository par entité exemple :

package com.toto.ex.test.repository;

import com.toto.ex.test.domain.Test;
import org.springframework.data.jpa.repository.JpaRepository;

public interface TestRepository extends JpaRepository<Test, Long> {

}
```
injecter le repository dans l'implémentation du controller
```java
    @Autowired
    private TestRepository testRepository;
```
Modifier le fichier de configuration de votre projet. Ici le fichier a été passé au format Yaml
[En mémo l'ensemble des propriétés Spring que l'on pourrait trouver dans un fichier de properties](https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html)
```yaml
# One port by SpringBoot application
server:
  port: ${port:8091}
  context-path: /test/api

#Spring Server Configuration
spring:
  application:
    name: Test
# ===============================
# = DATABASE
# ===============================

# Connection url for the database
  datasource:
    url: jdbc:postgresql://localhost:5432/test
# Username and password
    username: test
    password: test

    testWhileIdle: true
    validationQuery: SELECT 1

  jpa:
    properties:
      hibernate:
        dialect: org.hibernate.dialect.PostgreSQLDialect
        format_sql: true  # For debugging
        jdbc:
          lob:
            non_contextual_creation: true
    # Enable logging of SQL statements.
    show-sql: true
    # Hibernate ddl auto (create, create-drop, update): with "update" the database schema will be automatically updated accordingly to java entities found in the project
    hibernate:
      ddl-auto: update
  # ===============================
  # = LOGS
  # ===============================

  # Profile LEVEL DEV , REC , PROD
  profiles:
    active: DEV
# Log locations
logging:
  file: test.log
# Log configuration location
  #config: config/logback-spring.xml


# ===============================
# = DOCUMENTATION API
# ===============================

#SpringFox Documentation Api
springfox:
  documentation:
    swagger:
      v2:
        path: /api-docs
```

BONUS :
Ajoutez un fichier de configuration Logback  dans resources
`logback-spring.xml`
```xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
    <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}/}spring.log}"/>
    <include resource="org/springframework/boot/logging/logback/console-appender.xml"/>

    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <Pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg %n</Pattern>
        </encoder>
    </appender>


    <appender name="ROLLING-FILE"
              class="ch.qos.logback.core.rolling.RollingFileAppender">
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
        <file>${LOG_FILE}</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- daily rollover -->
            <fileNamePattern>${LOG_FILE}.%d{yyyy-MM-dd}</fileNamePattern>
        </rollingPolicy>
    </appender>

    <!-- # Available levels are: TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF -->

    <root level="ERROR">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="ROLLING-FILE"/>
    </root>

    <springProfile name="DEV">
        <!-- Replace your.package your start package name -->
        <logger name="your.package"  level="DEBUG" appender-ref="ROLLING-FILE"/>
        <logger name="org.hibernate"  level="DEBUG" appender-ref="ROLLING-FILE"/>
        <logger name="org.springframework"  level="INFO" appender-ref="ROLLING-FILE"/>
    </springProfile>

    <springProfile name="REC">
        <!-- Replace your.package by your start package name -->
        <logger name="your.package"  level="INFO" appender-ref="ROLLING-FILE"/>
        <logger name="org.hibernate"  level="ERROR" appender-ref="ROLLING-FILE"/>
        <logger name="org.springframework"  level="ERROR" appender-ref="ROLLING-FILE"/>
    </springProfile>

    <springProfile name="PROD">
        <!-- Replace your.package by your start package name -->
        <logger name="your.package"  level="ERROR" appender-ref="ROLLING-FILE"/>
        <logger name="org.hibernate"  level="ERROR" appender-ref="ROLLING-FILE"/>
        <logger name="org.springframework"  level="ERROR" appender-ref="ROLLING-FILE"/>
    </springProfile>



</configuration>

```

BONUS 2 ajoutez la supervision à votre projet
Dépendance dans le `pom.xml`
```
<!--Management dependencies -->
  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
  </dependency>
```
Puis la configuration dans votre application `application.yml`
```yml
# ===============================
# = SPRINGBOOT MANAGEMENT
# ===============================
management:
  server:
    # Option : default same application port
    port: ${admin-port:9991}
  # see endpoint https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html
  endpoints:
    web:
      #Option default: /actuator
      base-path: "/management"
      exposure:
        include: info, health, metrics
      cors:
        allowed-origins: '*'
        allowed-method: GET

info:
  app:
    name: Test
# ISO-8859 don't use french character or use Unicode
    description: API Test
    version: 1.0.0
    encoding: UTF-8
```
Ici sur votre serveur vous aurez les infos utiles sur l'état de votre application ex :
VOTREIP:9991/management/health
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment