27 Ocak 2023 Cuma

Testcontainers JDBC URL Kullanımı

Giriş
Açıklaması şöyle
... after making a very simple modification to your system's JDBC URL string, Testcontainers will provide a disposable stand-in database that can be used without requiring modification to your application code.
..
As long as you have Testcontainers and the appropriate JDBC driver on your classpath, you can simply modify regular JDBC connection URLs to get a fresh containerized instance of the database each time your application starts up.
Yani iki tane dependency gerekir.
1. Test containers
2. Veri tabanı için driver

Açıklaması şöyle. Yani JDBC URL kullanımında URL jdbc:tc:... şeklinde olmalı
You should use either
- the JDBC URL with tc: prefix and ContainerDatabaseDriver or
- container instance with getJdbcUrl() and the original driver (or let the system detect the driver for you), not both.

Kullanıcı İsmi ve Şifre
TestContainers normalde kullanıcı ismi ve şifreye gerek duymaz. Yani sadece URL ila bağlanabiliriz.
String jdbcUrl = "jdbc:tc:sqlserver:latest:///mydbName";
try (Connection conn = DriverManager.getConnection(jdbcUrl)) {
  ...
}
Stack trace şöyle. JDBC DriverManager kodu gidip Testcontainers içindeki ContainerDatabaseDriver sınıfını tetikliyor
at org.testcontainers.containers.GenericContainer.doStart(GenericContainer.java:349)
at org.testcontainers.containers.GenericContainer.start(GenericContainer.java:322)
at org.testcontainers.jdbc.ContainerDatabaseDriver.connect(ContainerDatabaseDriver.java:124)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:270)
Eğer istenirse container şöyle öldürülebilir
ContainerDatabaseDriver.killContainer(jdbcUrl);
ContainerDatabaseDriver.killContainers();
PostgreSQL
Kullanıcı ismi test ve şifresi test olan bir veri tabanı yaratır
Örnek
Şöyle yaparız. Kullanıcı ismi user, şifresi password olan bir veri tabanı yaratır
spring.datasource.url=jdbc:tc:postgresql://localhost/testdb
spring.datasource.driverClassName=org.testcontainers.jdbc.ContainerDatabaseDriver
spring.datasource.username=user
spring.datasource.password=password
MySQL
Kullanıcı ismi root ve şifresi test olan bir veri tabanı yaratır
Örnek
Şöyle yaparız
jdbc:tc:mysql:8.0.29:///mydb?TC_DAEMON=true&sessionVariables=sql_mode=ANSI
Örnek
Şöyle yaparız
jdbc:tc:mysql:8.0.29:///mydb?user=root?password=test?TC_DAEMON=true&sessionVariables=sql_mode=ANSI
MS SQL
Testcontainers JDBC URL Kullanımı yazısına taşıdım

MariaDB
Örnek
Şöyle yaparız
<dependency>
  <groupId>org.testcontainers</groupId>
  <artifactId>mariadb</artifactId>
  <version>1.17.6</version>
<scope>test</scope> </dependency> <dependency> <groupId>org.mariadb.jdbc</groupId> <artifactId>mariadb-java-client</artifactId> <version>3.1.2</version> <scope>test</scope> </dependency>
Şöyle yaparız
String jdbcUrl = 
"jdbc:tc:mariadb:latest:///mydbName?TC_DAEMON=true&sessionVariables=sql_mode=ANSI";
try (Connection conn = DriverManager.getConnection(jdbcUrl)) {
  ...
}

Hiç yorum yok:

Yorum Gönder