将Spring Boot与Cloud SQL进行连接

什么样的文章?

「时代已经进入云计算了!所以我也打算尝试使用云计算。」

由于我是Google的粉丝,所以我使用GCP。
首先,我将从本地环境连接到数据库并进行数据交换。

使用的物品

1. 需要预先获取 GCP 帐号。
2. 需要预先创建 GCP 的 MySQL 数据库实例,并参考教程进行操作。
3. 使用 Spring Boot。
※1. 包含了 Spring JPA 依赖项。其他部分可以参考其他 Spring Initializer 文章。
※2. 我个人喜欢使用 Maven。

达成目标

能够连接云上的数据库并进行数据交互。

步骤1:制作应用程序

由于只需进行数据交互,因此将其实现为API。

@RestController
public class DataGetController {

    @Autowired
    TestDataService testDataService;

    @RequestMapping(value = "/api/data/get", method = RequestMethod.GET)
    public List<TestData> doGet() throws Exception {
        return testDataService.getTestDataAll();
    }
}
@Service
public class TestDataService {

    @Autowired
    TestDataRepository testDataRepository;

    public List<TestData> getTestDataAll() {
        return testDataRepository.findAll();
    }

    @Transactional
    public boolean insertTestData(final TestData testData) {
        testDataRepository.save(testData);
        return true;
    }
}
@Entity
@Table(name = "test_data")
public class TestData{

    @Id
    @GeneratedValue
    private Integer id;

    @Column(name = "name", nullable = false)
    private String name;

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

请跳过仓库部分,直接阅读JPA的文章。

步骤二:进行设置

在参考公式的同时书写设置。
从App Engine连接到Cloud Sql。

在公式文件中,我们是在Java等源代码中进行编写的,但是如果在Spring Boot中,你必须在启动时通过配置文件进行加载,否则它会自动尝试访问其他不同的文件,导致程序崩溃。(失误1)
所以你需要在配置文件中进行加载。

spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://XXX.XXX.XXX.XXX/test_database
    username: root
    password: root
    type: com.zaxxer.hikari.HikariDataSource
    hikari:
      data-source-properties:
        socketFactory: com.google.cloud.sql.mysql.SocketFactory
        cloudSqlInstance: XXXX:asia-northeast1:XXXX

只是将其原样改写到yml文件中。

步骤三:添加依赖关系

如果继续启动,会崩溃。会不断出现不熟悉的异常。现在我正在写这个的时候已经解决了,连异常名称都忘记了……

看起来有很多事情要调查,但首先是添加依赖关系。

要连接到Cloud Sql,需要添加以下内容。

<!-- project配下 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-gcp-dependencies</artifactId>
                <version>1.2.3.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.google.cloud</groupId>
                <artifactId>libraries-bom</artifactId>
                <version>11.0.0</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    ~~~   

<!-- dependencies配下 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-gcp-starter-sql-mysql</artifactId>
        </dependency>
        <dependency>
            <groupId>com.google.cloud</groupId>
            <artifactId>google-cloud-storage</artifactId>
        </dependency>

这样就可以了。

第四步:添加设置

还未下降。
在yml文件中添加与Cloud Sql连接所需的设置。

#以下を追加
  cloud:
    gcp:
      sql:
        database-name: test_database
        instance-connection-name: XXXX:asia-northeast1:XXXX

我觉得有些人可能会认为这之前没写过吧?但我之前确实写过。
但是,属性名不同呢。
刚才的是用于使用HikariCP库创建连接池的设置。
这次是为了连接Cloud SQL的设置。

第五步:执行

我认为到目前为止应该可以工作了。

localhost:8080/api/data/get

[{"name":"name1"}]

我提前存放的数据已经返回了。

总结

请让我加入云计算工程师的行列吧!请让我成为你们的一员!

感谢您的阅读和关注。如果有任何错误或建议,请在评论中指出。谢谢!

广告
将在 10 秒后关闭
bannerAds