只用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中,并获取数据库的数据的示例应用程序。
创建项目
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()
}
应用程序开发/创建
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文件并输入命令。只需要再努力一点!
制作瓶子
让我们启动容器吧!
抱歉让您久等了!我们现在来启动容器,确认一下示范应用是否可以运行起来吧!
打开控制台,进入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,那么可以避免配置错误等细微错误的发生)
那么,祝你们的开发工作顺利!