Fix Spring Data Querydsl example.
The io.github.jpenren:thymeleaf-spring-data-dialect dependency was out of sync with thymeleaf causing an error when you tried to access the index page. Additionally Added a TestApplication and revamped the TestContainers usage.
This commit is contained in:
committed by
Oliver Drotbohm
parent
4caa29cc7e
commit
374307235c
@@ -4,9 +4,8 @@ This example shows some of the Spring Data Querydsl integration features with Sp
|
||||
|
||||
## Quickstart
|
||||
|
||||
1. Install MongoDB (http://www.mongodb.org/downloads, unzip, run `mkdir data`, run `bin/mongod --dbpath=data`)
|
||||
2. Build and run the app (`mvn spring-boot:run`)
|
||||
4. Access app directly via its UI (`http://localhost:8080/`).
|
||||
1. Build and run the app (`mvn spring-boot:test-run`)
|
||||
2. Access app directly via its UI (`http://localhost:8080/`).
|
||||
|
||||
## Interesting bits
|
||||
|
||||
|
||||
@@ -58,20 +58,20 @@
|
||||
<dependency>
|
||||
<groupId>io.github.jpenren</groupId>
|
||||
<artifactId>thymeleaf-spring-data-dialect</artifactId>
|
||||
<version>3.3.0</version>
|
||||
<version>3.6.0</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.webjars</groupId>
|
||||
<artifactId>jquery</artifactId>
|
||||
<version>2.1.3</version>
|
||||
<version>3.7.1</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.webjars</groupId>
|
||||
<artifactId>bootstrap</artifactId>
|
||||
<version>3.3.4</version>
|
||||
<version>5.3.3</version>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
|
||||
@@ -94,6 +94,18 @@
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.testcontainers</groupId>
|
||||
<artifactId>junit-jupiter</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-testcontainers</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
|
||||
@@ -23,23 +23,27 @@
|
||||
|
||||
<div class="form-group col-sm-6">
|
||||
<label for="firstname" class="control-label">Firstname:</label>
|
||||
<input id="firstname" name="firstname" th:value="${#httpServletRequest.getParameter('firstname')}" type="text" class="form-control" autofocus="autofocus" />
|
||||
<input id="firstname" name="firstname" th:value="${param.firstname}" type="text" class="form-control" autofocus="autofocus" />
|
||||
</div>
|
||||
<div class="form-group col-sm-6">
|
||||
<label for="lastname" class="control-label">Lastname:</label>
|
||||
<input id="lastname" name="lastname" th:value="${#httpServletRequest.getParameter('lastname')}" type="text" class="form-control" autofocus="autofocus" />
|
||||
<input id="lastname" name="lastname" th:value="${param.lastname}" type="text" class="form-control" autofocus="autofocus" />
|
||||
</div>
|
||||
<div class="form-group col-sm-6">
|
||||
<label for="address.city" class="control-label">City:</label>
|
||||
<input id="address.city" name="address.city" th:value="${#httpServletRequest.getParameter('address.city')}" type="text" class="form-control" />
|
||||
<input id="address.city" name="address.city" th:value="${param['address.city']}" type="text"
|
||||
class="form-control" />
|
||||
</div>
|
||||
<div class="form-group col-sm-6">
|
||||
<label for="address.street" class="control-label">Street:</label>
|
||||
<input id="address.street" name="address.street" th:value="${#httpServletRequest.getParameter('address.street')}" type="text" class="form-control" />
|
||||
<input id="address.street" name="address.street" th:value="${param['address.street']}"
|
||||
type="text"
|
||||
class="form-control" />
|
||||
</div>
|
||||
<div class="form-group col-sm-6">
|
||||
<label for="nationality" class="control-label">Nationality:</label>
|
||||
<input id="nationality" name="nationality" th:value="${#httpServletRequest.getParameter('nationality')}" type="text" class="form-control" />
|
||||
<input id="nationality" name="nationality" th:value="${param.nationality}" type="text"
|
||||
class="form-control" />
|
||||
</div>
|
||||
<div class="form-group col-sm-12">
|
||||
<button id="submit" type="submit" class="btn btn-default">Submit</button>
|
||||
@@ -75,7 +79,7 @@
|
||||
<tr th:each="user : ${users}">
|
||||
<td th:text="${users.number * users.size + userStat.index + 1} + '.'">1.</td>
|
||||
<td class="text-center">
|
||||
<img th:src="${user.picture.small}" class="img-circle" />
|
||||
<img th:src="${user.picture.small}" class="rounded-circle" />
|
||||
</td>
|
||||
<td th:text="${user.firstname}">Firstname</td>
|
||||
<td th:text="${user.lastname}">Lastname</td>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2017-2021 the original author or authors.
|
||||
* Copyright 2017-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -15,44 +15,26 @@
|
||||
*/
|
||||
package example.users;
|
||||
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import org.springframework.boot.test.context.SpringBootTest;
|
||||
import org.springframework.test.context.DynamicPropertyRegistry;
|
||||
import org.springframework.test.context.DynamicPropertySource;
|
||||
import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
|
||||
import org.testcontainers.containers.MongoDBContainer;
|
||||
import org.testcontainers.junit.jupiter.Container;
|
||||
import org.testcontainers.junit.jupiter.Testcontainers;
|
||||
import org.testcontainers.utility.DockerImageName;
|
||||
|
||||
/**
|
||||
* @author Oliver Gierke
|
||||
* @author Divya Srivastava
|
||||
* @author Tim Sparg
|
||||
*/
|
||||
@Testcontainers
|
||||
@SpringBootTest
|
||||
class ApplicationTests {
|
||||
|
||||
@Container //
|
||||
private static MongoDBContainer mongoDBContainer = MongoContainers.getDefaultContainer();
|
||||
|
||||
@DynamicPropertySource
|
||||
static void setProperties(DynamicPropertyRegistry registry) {
|
||||
registry.add("spring.data.mongodb.uri", mongoDBContainer::getReplicaSetUrl);
|
||||
}
|
||||
@Container
|
||||
@ServiceConnection static MongoDBContainer mongoDBContainer = new MongoDBContainer("mongo:7");
|
||||
|
||||
@Test
|
||||
void contextBootstraps() {}
|
||||
|
||||
static class MongoContainers {
|
||||
|
||||
private static final String IMAGE_NAME = "mongo:5.0";
|
||||
private static final String IMAGE_NAME_PROPERTY = "mongo.default.image.name";
|
||||
|
||||
public static MongoDBContainer getDefaultContainer() {
|
||||
return new MongoDBContainer(DockerImageName.parse(System.getProperty(IMAGE_NAME_PROPERTY, IMAGE_NAME)))
|
||||
.withReuse(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
* Copyright 2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package example.users;
|
||||
|
||||
import org.springframework.boot.SpringApplication;
|
||||
|
||||
/**
|
||||
* @author Tim Sparg
|
||||
*/
|
||||
public class TestApplication {
|
||||
|
||||
public static void main(String[] args) {
|
||||
SpringApplication.from(Application::main).with(TestcontainersConfiguration.class).run(args);
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
/*
|
||||
* Copyright 2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package example.users;
|
||||
|
||||
import org.springframework.boot.devtools.restart.RestartScope;
|
||||
import org.springframework.boot.test.context.TestConfiguration;
|
||||
import org.springframework.boot.testcontainers.service.connection.ServiceConnection;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.testcontainers.containers.MongoDBContainer;
|
||||
import org.testcontainers.utility.DockerImageName;
|
||||
|
||||
/**
|
||||
* @author Tim Sparg
|
||||
*/
|
||||
@TestConfiguration(proxyBeanMethods = false)
|
||||
public class TestcontainersConfiguration {
|
||||
|
||||
@Bean
|
||||
@ServiceConnection
|
||||
@RestartScope
|
||||
MongoDBContainer mongoDbContainer() {
|
||||
return new MongoDBContainer(DockerImageName.parse("mongo:7"));
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user