Spring Boot Support für jOOQ

Spring Boot Support für jOOQ

1. Überblick

Dieses Tutorial ist eine Fortsetzung des Artikels vonIntroduction to jOOQ with Spring, in dem die Möglichkeiten beschrieben werden, wie jOOQ in einer Spring Boot-Anwendung verwendet werden kann.

Wenn Sie dieses Tutorial noch nicht durchgearbeitet haben, schauen Sie es sich bitte an und befolgen Sie die Anweisungen in Abschnitt 2 zu Maven-Abhängigkeiten und in Abschnitt 3 zur Codegenerierung. Dadurch wird Quellcode für Java-Klassen generiert, die Tabellen in der Beispieldatenbank darstellen, einschließlichAuthor,Book undAuthorBook.

2. Maven-Konfiguration

Zusätzlich zu den Abhängigkeiten und Plugins, die im vorherigen Lernprogramm beschrieben wurden, müssen mehrere andere Komponenten in die Maven-POM-Datei aufgenommen werden, damit jOOQ mit Spring Boot funktioniert.

2.1. Abhängigkeitsmanagement

Die gebräuchlichste Methode, Spring Boot zu verwenden, besteht darin, vom Projektspring-boot-starter-parentzu erben, indem es im Elementparentdeklariert wird. Diese Methode ist jedoch nicht immer geeignet, da sie eine zu befolgende Vererbungskette auferlegt, die in vielen Fällen möglicherweise nicht den Anforderungen der Benutzer entspricht.

In diesem Lernprogramm wird ein anderer Ansatz verwendet: Delegieren der Abhängigkeitsverwaltung an Spring Boot. Fügen Sie dazu einfach das folgendedependencyManagement-Element zur POM-Datei hinzu:


    
        
            org.springframework.boot
            spring-boot-dependencies
            1.3.5.RELEASE
            pom
            import
        
    

2.3. Abhängigkeiten

Damit Spring Boot jOOQ steuern kann, muss eine Abhängigkeit vom Artefaktspring-boot-starter-jooqdeklariert werden:


    org.springframework.boot
    spring-boot-starter-jooq
    1.3.5.RELEASE

Beachten Sie, dass sich dieser Artikel auf die Open-Source-Distribution von jOOQ konzentriert. Wenn Sie mit den kommerziellen Distributionen arbeiten möchten, lesen Sie dieGuide to Using jOOQ’s Commercial Distributions with Spring Boot im offiziellen Blog.

3. Spring Boot-Konfiguration

3.1. Initial Boot Config

Bevor wir zum jOOQ-Support kommen, werden wir mit der Vorbereitung von Spring Boot beginnen.

Zunächst werden wir die Persistenzunterstützung und Verbesserungen in Boot und unsere Datenzugriffsinformationen in der Standarddateiapplication.propertiesnutzen. Auf diese Weise können wir die Definition der Beans überspringen und diese über eine separate Eigenschaftendatei konfigurierbar machen.

Hier fügen wir die URL und die Anmeldeinformationen hinzu, um unsere eingebettete H2-Datenbank zu definieren:

spring.datasource.url=jdbc:h2:~/jooq
spring.datasource.username=sa
spring.datasource.password=

Wir werden auch eine einfache Boot-Anwendung definieren:

@SpringBootApplication
@EnableTransactionManagement
public class Application {

}

Wir lassen diese einfach und leer und definieren alle anderen Bean-Deklarationen in einer anderen Konfigurationsklasse -InitialConfiguration.

3.2. Bean-Konfiguration

Definieren wir nun die KlasseInitialConfiguration:

@Configuration
public class InitialConfiguration {
    // Other declarations
}

Spring Boot hat diedataSource-Bean automatisch basierend auf den in derapplication.properties-Datei festgelegten Eigenschaften generiert und konfiguriert, sodass wir sie nicht manuell registrieren müssen. Mit dem folgenden Code kann die automatisch konfigurierteDataSource-Bean in ein Feld eingefügt werden und zeigt, wie diese Bean verwendet wird:

@Autowired
private DataSource dataSource;

@Bean
public DataSourceConnectionProvider connectionProvider() {
    return new DataSourceConnectionProvider
      (new TransactionAwareDataSourceProxy(dataSource));
}

Da eine Bean mit dem NamentransactionManager ebenfalls automatisch von Spring Boot erstellt und konfiguriert wurde, müssen wir keine andere Bean vom TypDataSourceTransactionManager wie im vorherigen Lernprogramm deklarieren, um die Unterstützung von Spring-Transaktionen nutzen zu können.

EineDSLContext-Bean wird auf dieselbe Weise wie in derPersistenceContext-Klasse des vorhergehenden Lernprogramms erstellt:

@Bean
public DefaultDSLContext dsl() {
    return new DefaultDSLContext(configuration());
}

Schließlich mussDSLContext eine Implementierung vonConfiguration bereitgestellt werden. Da Spring Boot den verwendeten SQL-Dialekt durch das Vorhandensein von H2-Artefakten im Klassenpfad erkennen kann, ist keine Dialektkonfiguration mehr erforderlich:

public DefaultConfiguration configuration() {
    DefaultConfiguration jooqConfiguration = new DefaultConfiguration();
    jooqConfiguration.set(connectionProvider());
    jooqConfiguration
      .set(new DefaultExecuteListenerProvider(exceptionTransformer()));

    return jooqConfiguration;
}

4. Verwenden von Spring Boot mit jOOQ

Um die Verfolgung der Spring Boot-Unterstützung für jOOQ zu vereinfachen, werden die Testfälle in der Vorgängerversion dieses Tutorials mit einer kleinen Änderung der Anmerkungen auf Klassenebene wiederverwendet:

@SpringApplicationConfiguration(Application.class)
@Transactional("transactionManager")
@RunWith(SpringJUnit4ClassRunner.class)
public class SpringBootTest {
    // Other declarations
}

Es ist klar, dass Spring Boot anstelle der Annotation@ContextConfiguration@SpringApplicationConfigurationverwendet, um den Kontextlader vonSpringApplicationContextLoaderzum Testen von Anwendungen zu nutzen.

Die Testmethoden zum Einfügen, Aktualisieren und Löschen von Daten sind genau die gleichen wie im vorherigen Tutorial. Weitere Informationen finden Sie in Abschnitt 5 dieses Artikels über die Verwendung von jOOQ mit Spring. Alle Tests sollten mit der neuen Konfiguration erfolgreich ausgeführt werden, um zu beweisen, dass jOOQ von Spring Boot vollständig unterstützt wird.

5. Fazit

Dieses Tutorial befasste sich eingehender mit der Verwendung von jOOQ mit Spring. Es wurden die Möglichkeiten vorgestellt, mit denen eine Spring Boot-Anwendung jOOQ für die typsichere Interaktion mit einer Datenbank nutzen kann.

Die Implementierung all dieser Beispiele und Codefragmente finden Sie ina GitHub project.