带有PostgreSQL的Docker Compose for Spring Boot应用程序

在此博客文章中,您将学习如何使用PostgreSQL配置Spring Boot应用程序以与Docker Compose一起运行。

这篇博客文章涵盖:

  • Spring Boot应用程序Dockerfile配置,在依赖关系和资源之间进行了清晰的分离
  • 用于通过PostgreSQL运行应用程序的Docker Compose配置

先决条件

  • 码头工人
  • Java 13
  • 终奌站
  • httpie(或curl)

应用

  • 使用Spring WebSpring Data JPASpring Data RESTPostgreSQL JDBC Driver依赖项生成基于Maven的Spring Boot应用PostgreSQL JDBC Driver

可以在Github上找到本文的源代码: https : //github.com/kolorobot/spring-boot-tc

Dockerfile

  • 创建Dockerfile
  • 基本Docker映像使用Alpine Linux:
 FROM openjdk: 13 -alpine 
  • 不要以root身份运行应用程序:
 RUN addgroup -S spring && adduser -S spring -G spring  USER spring:spring 
  • 不要将胖子容器部署到容器中,而是将依赖项,应用程序类和资源拆分到单独的层中:
 ARG DEPENDENCY=target/dependency  COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib  COPY ${DEPENDENCY}/META-INF /app/META-INF  COPY ${DEPENDENCY}/BOOT-INF/classes /app 

注意:如果您有基于Gradle的项目,则可以使用ARG来调整目录: docker build --build-arg DEPENDENCY=build/dependency -t spring-boot-tc .

  • 通过在java命令中指向主类和库,在容器内运行应用程序:
 ENTRYPOINT [ "java" , "-cp" ENTRYPOINT [ "-cp" , "app:app/lib/*" , "pl.codeleak.samples.springboot.tc.SpringBootTestcontainersApplication" ] 

完整的Dockerfile

 FROM openjdk: 13 -alpine  RUN addgroup -S spring && adduser -S spring -G spring  USER spring:spring  ARG DEPENDENCY=target/dependency  COPY ${DEPENDENCY}/BOOT-INF/lib /app/lib  COPY ${DEPENDENCY}/META-INF /app/META-INF  COPY ${DEPENDENCY}/BOOT-INF/classes /app  ENTRYPOINT [ "java" , "-cp" ENTRYPOINT [ "-cp" , "app:app/lib/*" , "pl.codeleak.samples.springboot.tc.SpringBootTestcontainersApplication" ] 

Docker新手? Docker在12分钟内进行了解释: https : //www.youtube.com/watch?v = YFl2mCHdv24

Docker撰写

  • 创建docker-compose.yml
  • 我们将提供两项servicesdb用于PostgreSQL数据库和app用于应用程序
    • db服务将使用公共存储库中的postgres映像,它将向主机公开端口5432 ,并将环境属性POSTGRES_*传递给容器以设置数据库名称,用户和密码。

完整docker-compose.yml

 version: '3'  services: db: image: "postgres" ports: - "5432:5432" environment: POSTGRES_DB: tc POSTGRES_USER: tc POSTGRES_PASSWORD: tc app: build: . ports: - "9000:8080" environment: SPRING_DATASOURCE_URL: jdbc:postgresql: //db/tc SPRING_DATASOURCE_USERNAME: tc SPRING_DATASOURCE_PASSWORD: tc depends_on: - db 

Docker Compose的新手? Docker Compose在12分钟内进行了解释: https : //www.youtube.com/watch?v = Qw9zlE3t8Ko

运行应用程序

  • 打包应用程序

$ ./mvnw clean package

要跳过测试,请使用: -DskipTests=true

  • fat-jar提取库

$ mkdir -p target/dependency && (cd target/dependency; jar -xf ../*.jar)

  • 使用docker-compose运行

$ docker-compose build && docker-compose up

  • 验证应用程序正在运行并响应请求
 $ http get : 9000 /owners  HTTP/ 1.1 200  Connection: keep-alive  { "_embedded" : { "owners" : [] }, "_links" : { "profile" : { "href" : " http://localhost:8080/profile/owners " }, "self" : { "href" : " http://localhost:8080/owners {?page,size,sort}" , "templated" : true } }, "page" : { "number" : 0 , "size" : 20 , "totalElements" : 0 , "totalPages" : 0 }  } 

源代码

可以在Github上找到本文的源代码: https : //github.com/kolorobot/spring-boot-tc

参考文献

  • https://spring.io/guides/gs/spring-boot-docker/
  • https://openliberty.io/blog/2018/06/29/optimizing-spring-boot-apps-for-docker.html

也可以看看

  • 使用JUnit 5进行Spring Boot测试
  • macOS:(Java)开发人员必备工具

翻译自: https://www.javacodegeeks.com/2020/03/docker-compose-for-spring-boot-application-with-postgresql.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/339685.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java中的jpa_JPA教程–在Java SE环境中设置JPA

java中的jpaJPA代表Java Persistence API,它基本上是一个规范,描述了一种将数据持久存储到持久存储(通常是数据库)中的方法。 我们可以将其视为类似于Hibernate之类的ORM工具的东西,除了它是Java EE规范的正式组成部分…

java中给组合框加监听器,如何区分ActionEvent中的多个组合框

我有两个类,一个包含两个组合框的监听器类和一个监听两个组合框的监听器类。该软件是关于披萨的,而组合框的选择是披萨类型和数量,我会发布相关的代码。(gui class)private Listener listen new Listener();private JComboBox chooseItem n…

使用ArchUnit验证代码和体系结构约束

介绍 ArchUnit是一个用于根据一组自定义代码和体系结构约束检查Java代码的库。 这些约束可以在单元测试中的流畅Java API中定义。 ArchUnit可用于验证类或层之间的依赖关系,检查循环依赖关系等等。 在本文中,我们将创建一些示例规则,以了解如…

php中des加密cbc模式,php中加密解密DES类的简单使用方法示例

本文实例讲述了php中加密解密DES类的简单使用方法。分享给大家供大家参考,具体如下:在平时的开发工作中,我们经常会对关键字符进行加密,可能为了安全 也可能为了规范,所以要正确使用DES加密解密代码1:class DES{var $k…

hibernate自定义_如何自定义Hibernate脏检查机制

hibernate自定义介绍 在上一篇文章中,我描述了Hibernate自动脏检查机制。 尽管您应该始终喜欢它,但是有时您可能想添加自己的自定义污垢检测策略。 自定义脏检查策略 Hibernate提供以下定制机制: Hibernate拦截器#findDirty(&am…

php 读取文件fread,PHP: 读取文件 fgets 和 fread 的差异

程序在写时, 何时要用 fgets? 何时要用 fread? 主要的差异在哪边? 以下就用简单的范例来说明~先创建一个文件: /tmp/readfile.txt, 内容如下:abcdefg123456789写两只简单的小程序:fgets 版$handle fopen(/tmp/readfile.txt, "r");$contents ;if ($handle) {whil…

java 并发线程_Java并发教程–线程之间的可见性

java 并发线程当在不同线程之间共享对象的状态时,除了原子性外,其他问题也会发挥作用。 其中之一是可见性。 关键事实是,如果没有同步,则不能保证指令按照它们在源代码中出现的顺序执行。 这不会影响单线程程序中的结果&#xff…

php实现中间件6,说一说ThinkPHP6中五花八门的中间件_PHP开发框架教程

thinkphp配置配置多应用多配置的方法_PHP开发框架教程一般的thinkphp框架一般都是单模块开发的,但有时候我们可能需要进行多模块开发,本文就来为大家介绍一下thinkphp配置多模块、多应用的方法。在ThinkPHP6中新增中间件功能,而且中间件又分很…

oracle怎么格式化sql语句,Oracle sqlplus格式化数据

SQL>set colsep ;     //-域输出分隔符SQL>set newp none //设置查询出来的数据分多少页显示,如果需要连续的数据,中间不要出现空行就把newp设置为none,这样输出的数据行都是连续的,中间没有空行之类的SQL&g…

使用Java迭代器修改数据时要小心

随着本学期的结束,我想我会分享一个关于我对Java迭代器非常非常熟悉的小故事。 现实世界语境 就上下文而言,我教第二年的软件组件课程,这是尝试进入该专业的学生的最后障碍。 当然,这门课程对学生来说压力很大,我经常…

oracle添加表的索引,oracle批量添加指定表前缀的索引SQL语句

oracle批量添加指定表前缀的索引SQL语句需要输入用户名,表空间,索引个数,表名前缀,过滤的表名后缀##需要输入用户名,表空间,索引个数,表名前缀,过滤的表名后缀declare--用户名userNa…

javafx隐藏_JavaFX技巧14:StackPane子项-隐藏但不消失

javafx隐藏另一个简短提示:Swing提供了一个名为CardLayout的布局管理器,该管理器管理容器内的一组组件(卡),但始终仅显示其中一个。 方法CardLayout.show(Container ,String)允许在组…

oracle yyyy和yy,Oracle PL / SQL:SYSDATE与’DD-MMM-YY’的区别?

在Oracle中,DATE值 – 尽管名称 – 也包含时间部分. SYSDATE包含当前日期和当前时间(最多秒).默认情况下,Oracle工具(愚蠢地)隐藏DATE值的时间部分.如果您运行:select to_char(sysdate,yyyy-mm-dd hh24:mi:ss) as sysdatefrom dual;你可以看到.所以SYSDATE可能是201…

维持硒测试自动化的完美方法

毫无疑问, 自动浏览器测试已经改变了软件开发的工作方式。 如果不是Selenium,我们将无法像我们一样使用各种各样的无错误Web应用程序。 但是有时,甚至IT部门也误解了自动化一词。 大多数人认为计算机将为他们完成所有测试! 他们最…

oracle42997,oracle与db2的比较

在DB2中从客户端访问服务器端的数据库时,不能直接用connect命令,而必须先建立通信node,再在node的基础上建立数据库连接。在命令行的具体操作如下:->db2 catalog tcpip node ABC remote serverName server 50000->db2 catal…

双色球霸主网络问题_霸主–统治和管理API的地方

双色球霸主网络问题今天我们生活在一个越来越分散的世界中。 如今的计算机系统不再是在随机桌子下面的某些硬件上运行单个部门项目,而是大规模,集中甚至分散地运行。 监视和管理的需求从未改变,但是随着时间的推移变得越来越复杂。 如果将所有…

php验证码 php中文网,ThinkPHP 使用不同风格及中文的验证码

使用其他风格验证码在上文《ThinkPHP 验证码详解及实例》中了解了 ThinkPHP 验证码的具体用法,本文将进一步介绍如何使用不同风格的验证码以及使用中文验证码。上文例子使用的是默认参数,也就是生成 4 位的数字验证码。buildImageVerify 方法生成验证码时…

Spring Boot端口从默认更改为自定义或新端口

更改Spring Boot应用程序端口的快速指南。 application.properties文件和yml文件中的server.port属性的示例。 以及从命令行参数 SpringBootApplication,WebServerFactoryCustomizer 1.简介 在本教程中,您将学习如何在Spring Boot应用程序中更改端口。 …

java 开发人员工具_Java开发人员应该知道的5种错误跟踪工具

java 开发人员工具随着Java生态系统的发展,可满足不断增长的请求和用户对高性能需求的Web应用程序成为了新型的现代开发工具。 具有快速新部署的快速节奏环境需要跟踪错误,并以传统方法无法维持的水平获得对应用程序行为的洞察力。 在本文中,…

oracle定时关闭job,Oracle 定时JOB

讲一下Oracle创建临时job小窍门,创建Oracle临时JOB是为了临时执行调用过程或者函数,只调用一次。1、创建Oracle临时jobdeclareVJOB number;beginsys.dbms_job.submit(VJOB,‘PKG_RULECALL.MAKE_ALL_SAMPLE_BY_MONTH_WTH(‘‘201701‘‘,NULL);‘,Sysdat…