使用MySQL后端创建Spring Boot应用程序
#java #mysql #springboot #aiven

这是您作为企业Java开发人员的第一周,您的项目经理请您为客户端项目构建演示应用程序。您很高兴应对挑战,但是您也有点紧张 - 您以前从未从头开始构建过Web应用程序。坐下来放松一下,当我们作为一个团队应对这一挑战时。

就像其他任何问题一样,可以解决一个复杂的问题:

  • 我们明确了解了要求
  • 我们将较大的问题分解为较小的问题
  • 我们了解时间,性能和可靠性要求

向项目经理提出一些问题后,您会意识到团队期望您建立后端并处理数据库部分,因为他们具有为应用程序构建UI的前端开发人员。让我们选择Java作为语言,然后将Spring引导作为框架。 Java将可移植性,可扩展性,安全性,社区支持和寿命的结合结合在一起,使其成为企业发展的流行选择。 Spring Boot是一个受欢迎的Java框架,可轻松快速有效地创建Web应用程序。它提供了广泛的功能,包括简单的配置,集成的安全性以及对多个数据源的支持,使其成为构建现代Web应用程序的理想选择。

但是您担心为客户部署和管理生产中的关系数据库。您的一位同事以前使用过Aiven,他们建议为该项目提供托管MySQL服务。 MySQL的AIND将提供自动维护,备份和升级,从而为您的重要项目提供时间和资源。您也不需要担心可扩展性和高可用性,并且AIVIN平台将确保数据库可以处理流量和数据量的波动而无需停机或性能问题。

在本教程中,我们将作为一个团队合作,使用Spring Boot构建演示后端应用程序,并为MySQL进行Aiven。

先决条件:

要遵循本教程,您需要:

  1. mySQL数据库:您可以使用现有的MySQL服务。否则,sign up for an Aiven accountfollow the instructions在Aiven上创建用于MySQL服务的Aiven。 (ðÖ有一个免费的层)

  2. Java开发套件(JDK):您需要在计算机上安装JDK来编译并运行Spring Boot应用程序。您可以从the Oracle website下载最新版本的JDK。在撰写本教程时,有Java 17和Java 20可供下载。您可以选择。

  3. IDE:您可以使用您选择的任何IDE来创建Spring Boot项目,例如Intellij Idea,Eclipse,Visual Studio Code或Netbeans。

  4. MySQL客户端:您需要一个MySQL客户端来连接到MySQL服务并管理您的数据库。您可以使用您选择的任何MySQL客户端,例如MySQL Workbench,Heidisql或Dbeaver。我正在使用mysqlsh -MySQL的高级命令行客户端和代码编辑器。

让我们创建一个MySQL服务

如果您已经拥有运行的MySQL服务,请随时跳过本节。在本节中,我将引导您通过为MySQL服务创建Aiven。假设您已经注册,请导航到Aiven console,然后单击创建服务

为mysql选择免费计划(是的,这是永远不含的计划!)

Choosing the plan

有了免费计划,您目前仅限于AWS地区。选择靠近您的区域,并给您的MySQL服务一个名称。单击创建服务

Create the service

nodes下的闪烁蓝色表示您的服务正在提供。固体绿色将表明您的MySQL服务正在运行。此时,转到服务并从概述选项卡中找到连接信息。

让我们创建一个Spring Boot应用程序

从模板创建Spring Boot应用程序的最简单方法是使用Spring initializr。以以下方式构建工件,然后单击生成。将下载A demo.zip 您可以在您喜欢的IDE中提取并打开。

Spring initializr

这是我对Spring Initializr的选择,但由于Java和Spring Boot版本可能有所不同,这可能会有所不同。

的演示项目
项目 maven
语言 java
春季靴子 3.1.0
io.aiven.spring.mysql
伪像 demo
名称 demo
描述 Spring Boot和MySQL
软件包名称 io.aiven.spring.mysql.demo
包装 jar
java 17
依赖项1 春季Web
依赖关系2 春季数据JPA
依赖项3 mysql驱动程序

将数据库连接添加到application.properties

Spring Boot带有H2作为默认数据库。由于您使用的是云数据库,因此必须定义application.properties文件中的连接属性。打开demo/src/main/resources/application.properties文件并添加以下内容:

spring.jpa.hibernate.ddl-auto=update
spring.datasource.url=jdbc:mysql://HOST:PORT/DATABASE
spring.datasource.username=USERNAME
spring.datasource.password=PASSWORD
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

您可以从概述标签中找到用于MySQL服务的连接信息:

Connection information

注意

在数据库处于生产状态之后,将spring.jpa.hibernate.ddl-auto设置为none是一个很好的安全实践。这也是mysql的默认值。

创建@entity模型

demo/src/main/java/io/aiven/spring/mysql/demo/User.java下创建以下实体模型,Hibernate将转化为表:

package io.aiven.spring.mysql.demo;

import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;

// This tells Hibernate to make a table out of this class
@Entity
public class User {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Integer id;

    private String name;

    private String email;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }
}

注意

如果您选择GenerationType.AUTO,则不会生成一个主键,并且无法创建MySQL服务中所需的表。这是因为出于安全原因,MySQL不允许creating new tables without primary keys。因此,我们选择GenerationType.IDENTITY

创建存储库

让我们创建存储库接口以按demo/src/main/java/io/aiven/spring/mysql/demo/UserRepository.java
保存用户记录

package io.aiven.spring.mysql.demo;

import org.springframework.data.repository.CrudRepository;

import io.aiven.spring.mysql.demo.User;

// This will be AUTO IMPLEMENTED by Spring into a Bean called userRepository
// CRUD refers Create, Read, Update, Delete

public interface UserRepository extends CrudRepository<User, Integer> {

}

创建控制器

要处理HTTP请求,让我们在demo/src/main/java/io/aiven/spring/mysql/demo/MainController.java下创建控制器类:

package io.aiven.spring.mysql.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
// This means that this class is a RestController
@RestController
// This means URL's start with /demo (after Application path)
@RequestMapping(path = "/demo")
public class MainController {
    // This means to get the bean called userRepository
    // which is auto-generated by Spring, we will use it to handle the data
    @Autowired
    private UserRepository userRepository;

    // Map ONLY POST Requests
    @PostMapping(path = "/add")
    public @ResponseBody User addNewUser(@RequestParam String name
            , @RequestParam String email) {
        // @ResponseBody means the returned User is the response, not a view name
        // @RequestParam means it is a parameter from the GET or POST request

        User springUser = new User();
        springUser.setName(name);
        springUser.setEmail(email);
        userRepository.save(springUser);
        return springUser;
    }

    @GetMapping(path = "/all")
    public @ResponseBody Iterable<User> getAllUsers() {
        // This returns a JSON or XML with the users
        return userRepository.findAll();
    }

}

此控制器创建两个REST API端点-/all列出所有用户和/add以添加新用户。

创建一个应用程序类

Spring Initializr在demo/src/main/java/io/aiven/spring/mysql/demo/DemoApplication.java下已经创建了一个示例应用程序类。您不需要添加任何东西,但是以下是Initializr的自动化代码:

package io.aiven.spring.mysql.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

@SpringBootApplication是Spring引导中的注释,用于配置和启动使用最小代码的Spring Boot应用程序。它将三个注释(@Configuration@EnableAutoConfiguration@ComponentScan)结合在一起,使得更容易引导Spring Boot应用程序。它可以启用Spring Boot的自动配置机制和组件扫描,并且还可以作为应用程序的主要入口。

main()方法使用Spring Boot的SpringApplication.run()方法启动应用程序。此Web应用程序完全是在Java中构建的,您不必担心配置任何基础架构或管道。

运行并测试应用程序

您可以使用Maven(./mvnw spring-boot:run)或代码编辑器的GUI从命令行运行该应用程序。我正在使用Intellij Idea,运行应用程序的步骤是运行 - > 运行'demoApplication'。运行应用程序后,将在计算机的端口8080上启动tomcat服务器。

让我们测试添加用户。在终端窗口中,执行:

curl http://localhost:8080/demo/add -d name="Sponge Bob" -d email=bob@crabby.com

让我们测试是否添加用户。要么从浏览器导航到localhost:8080/demo/all,要么从终端执行以下操作:

curl http://localhost:8080/demo/all

如果这是您第一次运行查询,则应看到以下输出:

[{"id":1,"name":"Sponge Bob","email":"bob@crabby.com"}]

包起来

恭喜!现在,您有了概念验证,可以向您的项目经理展示带有MySQL后端的演示Spring Boot应用程序。您已经学习了如何设置新的Aiven服务,配置Spring Boot应用程序以连接到它,并使用Spring Data JPA在数据库上执行基本的CRUD操作。有了这些知识,您现在可以自信地开发和部署更复杂的应用程序,以利用MySQL的Aiven的功能和便利性。我将其称为您重要项目的好开端!