Spring Cloud Dersleri : Spring Boot Projesini Google Cloud SQL Mysql Bağlantısı Kurmak

Spring Cloud

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.

Google Cloud Sql MySql

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

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>

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>

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;
    }
}

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

Tarayacımızda localhost:8080 tıklayalım. ve sonuca bakalım.

Database Connection Succesfuly Current Timestamp: 2020-07-12 18:17:16

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
Kaynak Kodlara Github'tan UlaşBu yazıda anlatılan projenin kaynak kodlarını Github üzerinden indirebilirsiniz.

Leave a Reply

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Burak KUTBAY 2010 - 2020
%d blogcu bunu beğendi: