From 038ac0a93222d8bf9706d94b5dd6ee9464e3bac8 Mon Sep 17 00:00:00 2001 From: Jens Schauder Date: Tue, 12 May 2020 08:44:46 +0200 Subject: [PATCH] #563 - Adapts JDBC examples to changes in Spring Data JDBC 2.0. Since SQL Identifiers are now quoted letter casing must be taken into consideration when specifying column names in `@Column` or similar. Disabled Liquibase which isn't used/configured at all and therefore doesn't work. Moved application context configurations to use `AbstractJdbcConfiguration`. --- .../aggregate/AggregateConfiguration.java | 23 +++++++++++++++++-- .../jdbc/basics/aggregate/LegoSet.java | 13 ++++++----- .../jdbc/basics/aggregate/Manual.java | 4 ++-- .../jdbc/basics/aggregate/Model.java | 4 ++-- .../jdbc/basics/aggregate/AggregateTests.java | 4 ++-- .../jdbc/jooq/CategoryConfiguration.java | 9 ++------ .../src/main/resources/application.properties | 3 ++- pom.xml | 2 +- 8 files changed, 39 insertions(+), 23 deletions(-) diff --git a/jdbc/basics/src/main/java/example/springdata/jdbc/basics/aggregate/AggregateConfiguration.java b/jdbc/basics/src/main/java/example/springdata/jdbc/basics/aggregate/AggregateConfiguration.java index 4c9b45dc..8b76ffb6 100644 --- a/jdbc/basics/src/main/java/example/springdata/jdbc/basics/aggregate/AggregateConfiguration.java +++ b/jdbc/basics/src/main/java/example/springdata/jdbc/basics/aggregate/AggregateConfiguration.java @@ -25,21 +25,26 @@ import org.springframework.context.ApplicationListener; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.convert.converter.Converter; +import org.springframework.core.io.ClassPathResource; import org.springframework.data.jdbc.core.convert.JdbcCustomConversions; +import org.springframework.data.jdbc.repository.config.AbstractJdbcConfiguration; import org.springframework.data.jdbc.repository.config.EnableJdbcRepositories; -import org.springframework.data.jdbc.repository.config.JdbcConfiguration; import org.springframework.data.relational.core.mapping.event.BeforeSaveEvent; import org.springframework.jdbc.core.JdbcOperations; import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate; +import org.springframework.jdbc.datasource.init.DataSourceInitializer; +import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; import org.springframework.lang.Nullable; +import javax.sql.DataSource; + /** * @author Jens Schauder * @author Mark Paluch */ @Configuration @EnableJdbcRepositories -public class AggregateConfiguration extends JdbcConfiguration { +public class AggregateConfiguration extends AbstractJdbcConfiguration { final AtomicInteger id = new AtomicInteger(0); @@ -93,4 +98,18 @@ public class AggregateConfiguration extends JdbcConfiguration { public NamedParameterJdbcTemplate namedParameterJdbcTemplate(JdbcOperations operations) { return new NamedParameterJdbcTemplate(operations); } + + @Bean + DataSourceInitializer initializer(DataSource dataSource) { + + DataSourceInitializer initializer = new DataSourceInitializer(); + initializer.setDataSource(dataSource); + + ClassPathResource script = new ClassPathResource("schema.sql"); + ResourceDatabasePopulator populator = new ResourceDatabasePopulator(script); + initializer.setDatabasePopulator(populator); + + return initializer; + } + } diff --git a/jdbc/basics/src/main/java/example/springdata/jdbc/basics/aggregate/LegoSet.java b/jdbc/basics/src/main/java/example/springdata/jdbc/basics/aggregate/LegoSet.java index abbaa5ea..6b728db5 100644 --- a/jdbc/basics/src/main/java/example/springdata/jdbc/basics/aggregate/LegoSet.java +++ b/jdbc/basics/src/main/java/example/springdata/jdbc/basics/aggregate/LegoSet.java @@ -18,7 +18,7 @@ package example.springdata.jdbc.basics.aggregate; import lombok.AccessLevel; import lombok.AllArgsConstructor; import lombok.Data; -import lombok.experimental.Wither; +import lombok.With; import java.time.Period; import java.time.temporal.ChronoUnit; @@ -30,6 +30,7 @@ import org.springframework.data.annotation.AccessType.Type; import org.springframework.data.annotation.Id; import org.springframework.data.annotation.Transient; import org.springframework.data.relational.core.mapping.Column; +import org.springframework.data.relational.core.mapping.MappedCollection; /** * A Lego Set consisting of multiple Blocks and a manual @@ -49,12 +50,12 @@ public class LegoSet { * Since Manuals are part of a {@link LegoSet} and only make sense inside a {@link LegoSet} it is considered part of * the Aggregate. */ - @Column("handbuch_id") + @Column("HANDBUCH_ID") private Manual manual; // You can build multiple models from one LegoSet - @Column(keyColumn = "name") - private final @AccessType(Type.FIELD) @Wither(AccessLevel.PACKAGE) Map models; + @MappedCollection(keyColumn = "NAME") + private final @AccessType(Type.FIELD) @With(AccessLevel.PACKAGE) Map models; LegoSet() { this.models = new HashMap<>(); @@ -62,7 +63,7 @@ public class LegoSet { // conversion for custom types currently has to be done through getters/setter + marking the underlying property with // @Transient. - @Column("min_age") + @Column("MIN_AGE") public int getIntMinimumAge() { return toInt(this.minimumAge); } @@ -71,7 +72,7 @@ public class LegoSet { minimumAge = toPeriod(years); } - @Column("max_age") + @Column("MAX_AGE") public int getIntMaximumAge() { return toInt(this.maximumAge); } diff --git a/jdbc/basics/src/main/java/example/springdata/jdbc/basics/aggregate/Manual.java b/jdbc/basics/src/main/java/example/springdata/jdbc/basics/aggregate/Manual.java index d38706c3..5329f70b 100644 --- a/jdbc/basics/src/main/java/example/springdata/jdbc/basics/aggregate/Manual.java +++ b/jdbc/basics/src/main/java/example/springdata/jdbc/basics/aggregate/Manual.java @@ -27,10 +27,10 @@ import org.springframework.data.relational.core.mapping.Table; * @author Jens Schauder */ @Data -@Table("handbuch") +@Table("HANDBUCH") public class Manual { - @Column("handbuch_id") + @Column("HANDBUCH_ID") private @Id Long id; private String author, text; diff --git a/jdbc/basics/src/main/java/example/springdata/jdbc/basics/aggregate/Model.java b/jdbc/basics/src/main/java/example/springdata/jdbc/basics/aggregate/Model.java index 3c2d2596..a39ab802 100644 --- a/jdbc/basics/src/main/java/example/springdata/jdbc/basics/aggregate/Model.java +++ b/jdbc/basics/src/main/java/example/springdata/jdbc/basics/aggregate/Model.java @@ -17,7 +17,7 @@ package example.springdata.jdbc.basics.aggregate; import lombok.AccessLevel; import lombok.Value; -import lombok.experimental.Wither; +import lombok.With; /** * One of potentially multiple models that can be build from a single {@link LegoSet}. No getters or setters needed. @@ -25,7 +25,7 @@ import lombok.experimental.Wither; * @author Jens Schauder */ @Value -@Wither(AccessLevel.PACKAGE) +@With(AccessLevel.PACKAGE) public class Model { String name, description; } diff --git a/jdbc/basics/src/test/java/example/springdata/jdbc/basics/aggregate/AggregateTests.java b/jdbc/basics/src/test/java/example/springdata/jdbc/basics/aggregate/AggregateTests.java index a548e0a3..71176e98 100644 --- a/jdbc/basics/src/test/java/example/springdata/jdbc/basics/aggregate/AggregateTests.java +++ b/jdbc/basics/src/test/java/example/springdata/jdbc/basics/aggregate/AggregateTests.java @@ -27,7 +27,7 @@ import org.assertj.core.groups.Tuple; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.test.autoconfigure.jdbc.AutoConfigureJdbc; +import org.springframework.boot.test.autoconfigure.data.jdbc.AutoConfigureDataJdbc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.junit4.SpringRunner; @@ -39,7 +39,7 @@ import org.springframework.test.context.junit4.SpringRunner; */ @RunWith(SpringRunner.class) @SpringBootTest(classes = AggregateConfiguration.class) -@AutoConfigureJdbc +@AutoConfigureDataJdbc @DirtiesContext(classMode = DirtiesContext.ClassMode.BEFORE_EACH_TEST_METHOD) public class AggregateTests { diff --git a/jdbc/jooq/src/main/java/example/springdata/jdbc/jooq/CategoryConfiguration.java b/jdbc/jooq/src/main/java/example/springdata/jdbc/jooq/CategoryConfiguration.java index bc0ec7a9..9d2a8f85 100644 --- a/jdbc/jooq/src/main/java/example/springdata/jdbc/jooq/CategoryConfiguration.java +++ b/jdbc/jooq/src/main/java/example/springdata/jdbc/jooq/CategoryConfiguration.java @@ -21,14 +21,10 @@ import org.jooq.impl.DataSourceConnectionProvider; import org.jooq.impl.DefaultConfiguration; import org.jooq.impl.DefaultDSLContext; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.context.ApplicationEvent; -import org.springframework.context.ApplicationListener; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Import; +import org.springframework.data.jdbc.repository.config.AbstractJdbcConfiguration; import org.springframework.data.jdbc.repository.config.EnableJdbcRepositories; -import org.springframework.data.jdbc.repository.config.JdbcConfiguration; -import org.springframework.data.relational.core.mapping.event.RelationalEvent; import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy; /** @@ -42,8 +38,7 @@ import org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy; */ @Configuration @EnableJdbcRepositories -@Import(JdbcConfiguration.class) -public class CategoryConfiguration { +public class CategoryConfiguration extends AbstractJdbcConfiguration { @Autowired private DataSource dataSource; diff --git a/jdbc/jooq/src/main/resources/application.properties b/jdbc/jooq/src/main/resources/application.properties index 2804353d..73a53c56 100644 --- a/jdbc/jooq/src/main/resources/application.properties +++ b/jdbc/jooq/src/main/resources/application.properties @@ -1,2 +1,3 @@ logging.level.org.springframework.data=INFO -logging.level.org.springframework.jdbc.core.JdbcTemplate=DEBUG \ No newline at end of file +logging.level.org.springframework.jdbc.core.JdbcTemplate=DEBUG +spring.liquibase.enabled=false \ No newline at end of file diff --git a/pom.xml b/pom.xml index 2d2a6de7..787ae018 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ bom elasticsearch - + jdbc jpa ldap map