Merge pull request #11187 from mladensavic94/master
Connecting to a Specific Schema in JDBC
This commit is contained in:
commit
789b7267be
|
@ -0,0 +1,6 @@
|
||||||
|
## JUnit5
|
||||||
|
|
||||||
|
This module contains articles about the JUnit 5
|
||||||
|
|
||||||
|
### Relevant Articles:
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<artifactId>junit5</artifactId>
|
||||||
|
<name>junit5</name>
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<artifactId>parent-modules</artifactId>
|
||||||
|
<groupId>com.baeldung</groupId>
|
||||||
|
<version>1.0.0-SNAPSHOT</version>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<properties>
|
||||||
|
<maven.compiler.source>8</maven.compiler.source>
|
||||||
|
<maven.compiler.target>8</maven.compiler.target>
|
||||||
|
</properties>
|
||||||
|
|
||||||
|
<dependencies>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.jupiter</groupId>
|
||||||
|
<artifactId>junit-jupiter-api</artifactId>
|
||||||
|
<version>5.8.1</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.junit.jupiter</groupId>
|
||||||
|
<artifactId>junit-jupiter-engine</artifactId>
|
||||||
|
<version>5.8.1</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
|
</dependencies>
|
||||||
|
|
||||||
|
</project>
|
|
@ -0,0 +1,21 @@
|
||||||
|
package com.baeldung.junit5;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
public class A_UnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void first() throws Exception{
|
||||||
|
System.out.println("Test A first() start => " + Thread.currentThread().getName());
|
||||||
|
Thread.sleep(500);
|
||||||
|
System.out.println("Test A first() end => " + Thread.currentThread().getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void second() throws Exception{
|
||||||
|
System.out.println("Test A second() start => " + Thread.currentThread().getName());
|
||||||
|
Thread.sleep(500);
|
||||||
|
System.out.println("Test A second() end => " + Thread.currentThread().getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
package com.baeldung.junit5;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.parallel.Execution;
|
||||||
|
import org.junit.jupiter.api.parallel.ExecutionMode;
|
||||||
|
|
||||||
|
public class B_UnitTest {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void first() throws Exception{
|
||||||
|
System.out.println("Test B first() start => " + Thread.currentThread().getName());
|
||||||
|
Thread.sleep(500);
|
||||||
|
System.out.println("Test B first() end => " + Thread.currentThread().getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void second() throws Exception{
|
||||||
|
System.out.println("Test B second() start => " + Thread.currentThread().getName());
|
||||||
|
Thread.sleep(500);
|
||||||
|
System.out.println("Test B second() end => " + Thread.currentThread().getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
package com.baeldung.junit5;
|
||||||
|
|
||||||
|
import org.junit.jupiter.api.AfterEach;
|
||||||
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
|
import org.junit.jupiter.api.Test;
|
||||||
|
import org.junit.jupiter.api.parallel.ResourceLock;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class C_UnitTest {
|
||||||
|
|
||||||
|
private List<String> resources;
|
||||||
|
|
||||||
|
@BeforeEach
|
||||||
|
void before() {
|
||||||
|
resources = new ArrayList<>();
|
||||||
|
resources.add("test");
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterEach
|
||||||
|
void after() {
|
||||||
|
resources.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@ResourceLock(value = "resources")
|
||||||
|
public void first() throws Exception {
|
||||||
|
System.out.println("Test C first() start => " + Thread.currentThread().getName());
|
||||||
|
resources.add("first");
|
||||||
|
System.out.println(resources);
|
||||||
|
Thread.sleep(500);
|
||||||
|
System.out.println("Test C first() end => " + Thread.currentThread().getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@ResourceLock(value = "resources")
|
||||||
|
public void second() throws Exception {
|
||||||
|
System.out.println("Test C second() start => " + Thread.currentThread().getName());
|
||||||
|
resources.add("second");
|
||||||
|
System.out.println(resources);
|
||||||
|
Thread.sleep(500);
|
||||||
|
System.out.println("Test C second() end => " + Thread.currentThread().getName());
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,4 @@
|
||||||
|
junit.jupiter.execution.parallel.enabled = true
|
||||||
|
junit.jupiter.execution.parallel.config.strategy=dynamic
|
||||||
|
junit.jupiter.execution.parallel.mode.default = concurrent
|
||||||
|
junit.jupiter.execution.parallel.mode.classes.default = concurrent
|
|
@ -74,6 +74,12 @@
|
||||||
<version>${junit-jupiter.version}</version>
|
<version>${junit-jupiter.version}</version>
|
||||||
<scope>test</scope>
|
<scope>test</scope>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.testcontainers</groupId>
|
||||||
|
<artifactId>postgresql</artifactId>
|
||||||
|
<version>1.16.0</version>
|
||||||
|
<scope>test</scope>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
package com.baeldung.jpa.postgresql_schema;
|
||||||
|
|
||||||
|
import javax.persistence.Entity;
|
||||||
|
import javax.persistence.Id;
|
||||||
|
import javax.persistence.Table;
|
||||||
|
|
||||||
|
@Entity
|
||||||
|
@Table(name = "product", schema = "store")
|
||||||
|
public class Product {
|
||||||
|
|
||||||
|
@Id
|
||||||
|
private int id;
|
||||||
|
private String name;
|
||||||
|
|
||||||
|
public int getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setId(int id) {
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
}
|
|
@ -149,4 +149,15 @@
|
||||||
<property name="hibernate.temp.use_jdbc_metadata_defaults" value="false"/>
|
<property name="hibernate.temp.use_jdbc_metadata_defaults" value="false"/>
|
||||||
</properties>
|
</properties>
|
||||||
</persistence-unit>
|
</persistence-unit>
|
||||||
|
<persistence-unit name="postgresql_schema_unit">
|
||||||
|
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
|
||||||
|
<class>com.baeldung.jpa.postgresql_schema.Product</class>
|
||||||
|
<exclude-unlisted-classes>true</exclude-unlisted-classes>
|
||||||
|
<properties>
|
||||||
|
<property name="hibernate.connection.driver" value="org.postgresql.Driver"/>
|
||||||
|
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL10Dialect"/>
|
||||||
|
<property name="hibernate.format_sql" value="true"/>
|
||||||
|
<property name="hibernate.temp.use_jdbc_metadata_defaults" value="false"/>
|
||||||
|
</properties>
|
||||||
|
</persistence-unit>
|
||||||
</persistence>
|
</persistence>
|
||||||
|
|
|
@ -0,0 +1,85 @@
|
||||||
|
package com.baeldung.jpa.postgresql_schema;
|
||||||
|
|
||||||
|
import org.junit.BeforeClass;
|
||||||
|
import org.junit.ClassRule;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.postgresql.ds.PGSimpleDataSource;
|
||||||
|
|
||||||
|
import javax.persistence.EntityManager;
|
||||||
|
import javax.persistence.EntityManagerFactory;
|
||||||
|
import javax.persistence.Persistence;
|
||||||
|
import java.sql.Connection;
|
||||||
|
import java.sql.DriverManager;
|
||||||
|
import java.sql.ResultSet;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Properties;
|
||||||
|
|
||||||
|
import static org.hamcrest.CoreMatchers.equalTo;
|
||||||
|
import static org.hamcrest.MatcherAssert.assertThat;
|
||||||
|
|
||||||
|
public class PostgresqlSchemaLiveTest {
|
||||||
|
//This tests require running Docker application with working internet connection to fetch
|
||||||
|
//Postgres image if the image is not available locally.
|
||||||
|
|
||||||
|
@ClassRule
|
||||||
|
public static PostgresqlTestContainer container = PostgresqlTestContainer.getInstance();
|
||||||
|
|
||||||
|
|
||||||
|
@BeforeClass
|
||||||
|
public static void setup() throws Exception {
|
||||||
|
Properties properties = new Properties();
|
||||||
|
properties.setProperty("user", container.getUsername());
|
||||||
|
properties.setProperty("password", container.getPassword());
|
||||||
|
Connection connection = DriverManager.getConnection(container.getJdbcUrl(), properties);
|
||||||
|
connection.createStatement().execute("CREATE SCHEMA store");
|
||||||
|
connection.createStatement().execute("CREATE TABLE store.product(id SERIAL PRIMARY KEY, name VARCHAR(20))");
|
||||||
|
connection.createStatement().execute("INSERT INTO store.product VALUES(1, 'test product')");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void settingUpSchemaUsingJdbcURL() throws Exception {
|
||||||
|
Properties properties = new Properties();
|
||||||
|
properties.setProperty("user", container.getUsername());
|
||||||
|
properties.setProperty("password", container.getPassword());
|
||||||
|
Connection connection = DriverManager.getConnection(container.getJdbcUrl().concat("¤tSchema=store"), properties);
|
||||||
|
|
||||||
|
ResultSet resultSet = connection.createStatement().executeQuery("SELECT * FROM product");
|
||||||
|
resultSet.next();
|
||||||
|
|
||||||
|
assertThat(resultSet.getInt(1), equalTo(1));
|
||||||
|
assertThat(resultSet.getString(2), equalTo("test product"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void settingUpSchemaUsingPGSimpleDataSource() throws Exception {
|
||||||
|
int port = Integer.parseInt(container.getJdbcUrl().substring(container.getJdbcUrl().lastIndexOf(":") + 1, container.getJdbcUrl().lastIndexOf("/")));
|
||||||
|
PGSimpleDataSource ds = new PGSimpleDataSource();
|
||||||
|
ds.setServerNames(new String[]{container.getHost()});
|
||||||
|
ds.setPortNumbers(new int[]{port});
|
||||||
|
ds.setUser(container.getUsername());
|
||||||
|
ds.setPassword(container.getPassword());
|
||||||
|
ds.setDatabaseName("test");
|
||||||
|
ds.setCurrentSchema("store");
|
||||||
|
|
||||||
|
ResultSet resultSet = ds.getConnection().createStatement().executeQuery("SELECT * FROM product");
|
||||||
|
resultSet.next();
|
||||||
|
|
||||||
|
assertThat(resultSet.getInt(1), equalTo(1));
|
||||||
|
assertThat(resultSet.getString(2), equalTo("test product"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void settingUpSchemaUsingTableAnnotation() {
|
||||||
|
Map<String, String> props = new HashMap<>();
|
||||||
|
props.put("hibernate.connection.url", container.getJdbcUrl());
|
||||||
|
props.put("hibernate.connection.user", container.getUsername());
|
||||||
|
props.put("hibernate.connection.password", container.getPassword());
|
||||||
|
EntityManagerFactory emf = Persistence.createEntityManagerFactory("postgresql_schema_unit", props);
|
||||||
|
EntityManager entityManager = emf.createEntityManager();
|
||||||
|
|
||||||
|
Product product = entityManager.find(Product.class, 1);
|
||||||
|
|
||||||
|
assertThat(product.getName(), equalTo("test product"));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,22 @@
|
||||||
|
package com.baeldung.jpa.postgresql_schema;
|
||||||
|
|
||||||
|
import org.testcontainers.containers.PostgreSQLContainer;
|
||||||
|
|
||||||
|
public class PostgresqlTestContainer extends PostgreSQLContainer<PostgresqlTestContainer> {
|
||||||
|
|
||||||
|
private static final String IMAGE_VERSION = "postgres";
|
||||||
|
|
||||||
|
private static PostgresqlTestContainer container;
|
||||||
|
|
||||||
|
|
||||||
|
private PostgresqlTestContainer() {
|
||||||
|
super(IMAGE_VERSION);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static PostgresqlTestContainer getInstance() {
|
||||||
|
if (container == null) {
|
||||||
|
container = new PostgresqlTestContainer();
|
||||||
|
}
|
||||||
|
return container;
|
||||||
|
}
|
||||||
|
}
|
1
pom.xml
1
pom.xml
|
@ -472,6 +472,7 @@
|
||||||
<module>json-path</module>
|
<module>json-path</module>
|
||||||
<module>jsoup</module>
|
<module>jsoup</module>
|
||||||
<module>jta</module>
|
<module>jta</module>
|
||||||
|
<module>junit5</module>
|
||||||
<module>kubernetes</module>
|
<module>kubernetes</module>
|
||||||
<module>ksqldb</module>
|
<module>ksqldb</module>
|
||||||
<!-- <module>lagom</module> --> <!-- Not a maven project -->
|
<!-- <module>lagom</module> --> <!-- Not a maven project -->
|
||||||
|
|
Loading…
Reference in New Issue