将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"}]
我提前存放的数据已经返回了。
总结
请让我加入云计算工程师的行列吧!请让我成为你们的一员!
感谢您的阅读和关注。如果有任何错误或建议,请在评论中指出。谢谢!