只用docker-compose就可以搭建Spring Boot和PostgreSQL的开发环境!

简述

这是一篇使用docker-compose来准备SpringBoot和PostgreSQL开发环境的入门文章。由于篇幅较长,我将把文章分成上下两部分来写(这篇文章是下半部分!)。

    • SpringBootとPostgreSQLの開発環境をdocker-composeだけで用意する!上

 

    SpringBootとPostgreSQLの開発環境をdocker-composeだけで用意する!下

好的,前半部分我们创建了docker-compose.yml文件,准备了数据库的初始化处理,为接下来的部署做好了准备。
因此,在后半部分,我们要准备一个实际的SpringBoot示例应用,并在Docker容器上实际运行起来!
所以,接下来要写以下内容。

    • サンプルアプリを作成する。

 

    実際にコンテナを動かしてみる。

即使稍微冗长一些,但我尽量使代码副本能够顺利运行,以减少对代码本身的解释说明。
所以,我相信进展会比你想象的更加迅速,请务必坚持到最后!
接下来,我们开始进行后半部分。

制作一个示例应用程序。

首先,在Eclipse中创建一个Gradle项目,概述了将Spring Data添加到Spring Boot中,并获取数据库的数据的示例应用程序。

创建项目

スクリーンショット 2019-09-22 16.08.46.png
スクリーンショット 2019-09-22 16.10.52.png

Gradle调整

一旦项目创建完成后,我们将修改build.gradle文件并添加所需的外部库(如Spring Boot)到示例应用程序中。
由于build.gradle的解释会很冗长,我们将简化说明内容。
请直接复制并粘贴以下内容。

plugins {
    id 'java'
    id 'application'
    id 'eclipse'
    id 'com.gradle.build-scan' version '2.3'
    id 'org.springframework.boot' version '2.1.6.RELEASE'
    id 'io.spring.dependency-management' version '1.0.8.RELEASE'
}

repositories {
    jcenter()
}

dependencies {
    implementation 'com.google.guava:guava:27.1-jre'
    // Spring boot と Spring data関連のライブラリを読み込みます。
    implementation 'org.springframework.boot:spring-boot-dependencies:2.1.8.RELEASE'
    implementation 'org.springframework.boot:spring-boot-starter-web:2.1.8.RELEASE'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa:2.1.8.RELEASE'
    implementation 'org.springframework:spring-core:5.1.9.RELEASE'
    implementation 'org.springframework:spring-aspects:5.1.9.RELEASE'
    // postgresn関連のライブラリを読み込みます。
    implementation 'org.postgresql:postgresql:42.2.8'

    // テスト関連のライブラリを読み込みます。
    testImplementation 'org.springframework.boot:spring-boot-starter-test:2.1.6.RELEASE'
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.4.2'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.4.2'

    components {
        withModule('org.springframework:spring-beans') {
            allVariants {
                withDependencyConstraints {
                    it.findAll { it.name == 'snakeyaml' }.each { it.version { strictly '1.19' } }
                }
            }
        }
    }
}

bootJar {
    // 作成されるjarファイルの名前を設定します。 今回の場合は、app.jarとなります。
    baseName = 'app'
    // spring boot 起動のクラス名を設定します。
    mainClassName = 'jp.co.test.App'
}

buildScan {
    termsOfServiceUrl = 'https://gradle.com/terms-of-service'
    termsOfServiceAgree = 'yes'
    publishAlways()
}

test {
    useJUnitPlatform()
}
スクリーンショット 2019-09-22 16.04.46.png

应用程序开发/创建

スクリーンショット 2019-09-22 16.34.08.png

1. 起動引导类

我們將創建一個用於啟動Spring Boot的類。

package jp.co.test;

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

/**
 * SpringBoot起動クラス.
 */
@SpringBootApplication
public class App {
  public static void main(String[] args) {
    SpringApplication.run(App.class, args);
  }
}

2. 实体类

为了使用O/R映射器,我们需要创建与表相关的实体类。

package jp.co.test.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "users")
public class User {

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private Long id;
  private String name;

  protected User() {}

  /**
   * コンストラクタ.
   * 
   * @param name ユーザ名
   */
  public User(String name) {
    this.name = name;
  }

  public Long getId() {
    return id;
  }

  public String getName() {
    return name;
  }

  @Override
  public String toString() {
    return String.format("{id:%d,name:%s}", id, name);
  }

}

3. 进行数据库操作的Repository类。

由于它是O/R映射器,所以不需要编写SQL,但它是用于执行数据库操作的类。

package jp.co.test.repository;

import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import jp.co.test.entity.User;

@Repository
public interface UserRepository extends CrudRepository<User, Long> {
}

4. 接受请求的控制器类

package jp.co.test.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import jp.co.test.repository.UserRepository;

@RestController
public class UserController {

  private final UserRepository repository;

  @Autowired
  public UserController(UserRepository repository) {
    this.repository = repository;
  }

  @RequestMapping("/")
  public String user() {
    return String.valueOf(repository.findAll());
  }
}

不要忘记的application.properties

然后,我经常忘记的是,要准备一个application.properties文件,并在其中写入数据库连接信息。
在src/main/resources目录下,创建一个名为application.properties的文件。

数据库连接目标

spring.datasource.url=jdbc:postgresql://db:5432/test 的中文本地化版本为:春季.數據源.url=jdbc协议:postgresql://数据库:5432/测试。

数据库用户名 (DB username)

spring.datasource.username=testuser can be paraphrased as “数据库用户名为testuser” in Chinese.

数据库密码

spring.datasource.password=测试密码

JDBC驱动程序

spring.datasource.driverClassName=org.postgresql.Driver

spring数据源驱动类名=org.postgresql.Driver

若未設定hibername(休眠模式名稱),無法啟動。

spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.show-sql=false
spring.jpa.hibernate.ddl-auto=none

原生地用中文表达如下:
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.show-sql=false
spring.jpa.hibernate.ddl-auto=none

试着运行容器并体验。

好了,样例应用程序已经完成了!接下来只需要制作一个jar文件并输入命令。只需要再努力一点!

制作瓶子

スクリーンショット 2019-09-22 16.48.21.png
スクリーンショット 2019-09-22 16.50.26.png

让我们启动容器吧!

抱歉让您久等了!我们现在来启动容器,确认一下示范应用是否可以运行起来吧!

打开控制台,进入docker-compose.yml所在的目录。
然后,使用以下命令启动容器。

docker-compose up -d

我认为会出现这样的消息。

Creating spring-boot-postgre-docker-template_db_1 ... done
Creating spring-boot-postgre-docker-template_app_1 ... done

为了确保,用以下命令确认容器是否已启动。

docker-compose ps

如果状态为Up,那就是成功了!

                 Name                                 Command               State           Ports
-----------------------------------------------------------------------------------------------------------
spring-boot-postgre-docker-template_app_1   java -Djava.security.egd=f ...   Up      0.0.0.0:8080->8080/tcp
spring-boot-postgre-docker-template_db_1    docker-entrypoint.sh postgres    Up      0.0.0.0:5432->5432/tcp

立即访问应用程序进行查看!
http://localhost:8080/

总结

尽管有点长,但是目前为止就到这里了!虽然文章很长,但我觉得你们一定可以轻松阅读!
现在,你已经成功在你的本地环境中配置了适用于Linux的SpringBoot开发环境。
由于我们尽量减少了开发环境与生产环境之间的差异,所以这对你们相当有用!
(我们可以轻松创建DB环境,并且如果大家都使用相同的docker-compose.yml,那么可以避免配置错误等细微错误的发生)

那么,祝你们的开发工作顺利!

样本

广告
将在 10 秒后关闭
bannerAds