Spring Cloud Dersleri : Spring Boot Projesini Google Cloud SQL Mysql Bağlantısı Kurmak
Spring Cloud Dersleri’ne devam ediyoruz. Önceki yazımızda bir Spring Boot Projesi’ni, Google App Engine deploy etmiştik.
Bu yazı da ise Google Cloud SQL kulanarak projemizi Google Cloud’da oluşturduğumuz veritabanına Spring Boot projemizden Spring Cloud ile bağlanacağız ve Google App Engine ‘ye projemizi deploy edeceğiz.
Google Cloud SQL MySQL Oluşturmak
Google Cloud’a giriyoruz. Veritbanı olarak MySql seçiyoruz.
MySql’i oluşturduk. Burada dikkat etmemiz gereken alanlar bulunmaktadır. root, bölge alanları önemli root şifremizi bu veritabanına ulaşmak için kaydetmememiz gerekir. bölge alanı ise veritabanımızın bulunacağı fiziksel lokasyonu belirliyoruz. ve oluştur butonuna bastığımızda MySql olşturmuş oluyoruz.
MySql‘imizin içerisinde bir tablo oluşturalım.
Veritabanı oluştur butonuna basalım.
Böylelikle veritabanımızı oluşturduk. Veribanımızın instance name (bağlantı adı) not edelim. Google Cloud Console’dan bağlantı adını öğrenebiliriz.
spring.cloud.gcp.sql.instance-connection-name
Code language: CSS (css)
Spring Boot Projesi Oluşturma
Spring Boot projesi oluşturalım. Maven Bağımlılığımız aşağıdaki gibi olacak. Önceki yazımda olan ve github’ta başlangıç projesini bulabilir ya da buradan da takip ederek geliştirebiliriz.
<?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>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>org.example</groupId>
<artifactId>Spirng-Boot-Google-Cloud-MySql-Project</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR2</spring-cloud.version>
<google-api-client.version>1.30.2</google-api-client.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-sql-mysql</artifactId>
</dependency>
<dependency>
<groupId>com.google.api-client</groupId>
<artifactId>google-api-client</artifactId>
<version>${google-api-client.version}</version>
</dependency>
<dependency>
<groupId>com.google.api-client</groupId>
<artifactId>google-api-client-appengine</artifactId>
<version>${google-api-client.version}</version>
</dependency>
<dependency>
<groupId>com.google.api-client</groupId>
<artifactId>google-api-client-servlet</artifactId>
<version>${google-api-client.version}</version>
</dependency>
<dependency>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-api-1.0-sdk</artifactId>
<version>${appengine-sdk.version}</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>jul-to-slf4j</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.google.cloud.tools</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>2.0.0</version>
</plugin>
</plugins>
</build>
</project>
Code language: HTML, XML (xml)
Spring Boot projemizden Google Cloud MySql’e bağlantısı için Spring Cloud Mysql bağımlılığı ekledik.
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-sql-mysql</artifactId>
</dependency>
Code language: HTML, XML (xml)
application.properties dosyasına gerekli kullanıcı ve bağlantı bilgilerini yazıyoruz.
spring.datasource.username=kullanici-adi
spring.datasource.password=sifre
spring.cloud.gcp.sql.database-name=veritabani-adi
spring.cloud.gcp.sql.instance-connection-name=baglanti-ad
Bu bağlantı bilgileri bize Google Cloud SQL Mysql Veritabanı tablomuza bağlanmamızı sağlayacak.
Projemize bir controller oluşturalım ve Rest Api şeklinde bir yapı oluşturağız. Bu yapıda Google Cloud SQL Mysql veritabanının tarih zaman bilgisini çekip göstereceğiz. Bu sayede projemizden Google Cloud SQL MySql’e bağlanacağız.
@RestController
public class ConnectionController {
private final JdbcTemplate jdbcTemplate;
public ConnectionController(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
@GetMapping("/")
public String connect(){
String currentTimestamp=jdbcTemplate.queryForObject("SELECT CURRENT_TIMESTAMP()", String.class);
return "Database Connection Succesfuly Current Timestamp: "+ currentTimestamp;
}
}
Code language: JavaScript (javascript)
Yukarıdaki controller classımız çalıştığı anda veritabanına bağlanacak eğer bağlantı başarılı olursa ilgili mesajı tarayıcımızda göreceğiz.
Projemizin yerel bilgisayarımızda Google Cloud SQL’e bağlanabilmesi için bir key anahtarı edinip projemize eklememiz gerekmektedir. Bu sayede projemiz kendi bilgisayarımızda sorunsuz şekilde çalışır bunun için yapmamız gereken;
iam-admin sekmesinden Hizmet ve Hesaplar bölümünde Hizmet Hesabı Oluştur sekmesine tıklyoruz ve aşağıdaki resim sonrasında tüm izinler vererek
json olarak indirdiğimiz dosyayı projemizin resources altına ekleyelim ve application.properties dosyasına bu keyi kullandığımızı belirten dosya lokasyonunu girelim.
spring.cloud.gcp.credentials.location=classpath:dosyaadi.json
Google App Engine’e deploy etmeden önce projemizi aşağıdaki komut ile çalıştıralım.
mvn appengine:run
Code language: CSS (css)
Tarayacımızda localhost:8080 tıklayalım. ve sonuca bakalım.
Database Connection Succesfuly Current Timestamp: 2020-07-12 18:17:16
Code language: CSS (css)
Spring Boot Projesini Google App Engine Deploy Etmek
Aşağıdaki komutu girerek Google Cloud App Engine ye projemizi yüklüyoruz.
mvn appengine:deploy -Dapp.deploy.projectId=[PROJECT_ID] -Dapp.deploy.version=1.0
No Comment! Be the first one.