compose应用_带有PostgreSQLDocker Compose for Spring Boot应用程序

compose应用

在此博客文章中,您将学习如何使用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 
  • 不要将fat-jar部署到容器中,而是将依赖项以及应用程序类和资源拆分到单独的层中:
 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

compose应用

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

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

相关文章

单例模式面试题

转载自 单例模式面试题(特点、理解) (1)单例模式特点(什么是单例模式)?  a.单例类只能有一个实例。  b.单例类必须自己创建自己的唯一实例。  c.单例类必须给所有其他对象提供这一实例。 (2)单例模式的作用&#x…

MySQL的source命令不加分号和delimiter的使用

【0】README 0.1)本文旨在 review source 命令, 这一直是我的痛,为什么一直导入 sql 文件不成功,一直没有写 blog 吧他 记录下来(事实上,也间接证明我就是个小白); 0.2&#xff09…

selenium自动化测试_维持Selenium测试自动化的完美方法

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

单例模式的优与劣

转载自 大话设计模式(四)单例模式的优与劣前言首先来明确一个问题,那就是在某些情况下,有些对象,我们只需要一个就可以了,比如,一台计算机上可以连好几个打印机,但是这个计算机上的打印程序只能有一个&…

MySQL存储过程+游标+触发器

【0】README0.1)本文旨在 arrange mysql 存储过程及如何在存储中使用游标 的相关知识;0.2)delimieter的用法:参见 http://blog.csdn.net/pacosonswjtu/article/details/51407756;【1】存储过程基础1)intro…

java迭代器退出迭代_使用Java迭代器修改数据时要小心

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

pojo 带参构造函数_带有Java Pojo作为输入输出示例的AWS Lambda函数

pojo 带参构造函数在上一个教程中,我们看到了如何使用Java创建AWS Lambda函数,我们传递了String作为输入,还返回了String作为Output。如果您是第一次创建lambda函数,我建议先阅读该教程。 在本教程中,我们将看到如何传…

MySQL检索数据(过滤+通配符+正则表达式)

【0】README0.1)本文部分文字描述转自“MySQL 必知必会”,旨在review “MySQL的基础知识”;【1】检索数据1)检索单个列:select a_name from table_name;2)检索多个列:select a_name,b_name from…

创建者模式

转载自 设计模式之创建者模式创建者模式又叫建造者模式,是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重…

buildpack_使用Buildpack容器化Spring Boot应用程序

buildpack在本文中,我们将看到如何使用Buildpacks容器化Spring Boot应用程序。 在先前的一篇文章中,我讨论了Jib 。 Jib允许我们在不使用Dockerfile的情况下将任何Java应用程序构建为Docker映像。 现在,从Spring Boot 2.3开始,我们…

MySQL创建字段+数据处理函数+汇总数据(聚集函数)+分组数据

【0】README0.1)本文部分文字描述转自“MySQL 必知必会”,旨在review“MySQL创建字段数据处理函数汇总数据(聚集函数)分组数据” 的基础知识;【1】创建计算字段1)problemsolution1.1)problem&am…

apache.camel_Apache Camel 3.2 – Camel的无反射配置

apache.camel在Apache Camel项目中,我们正在努力开发下一个即将发布的Apache Camel 3.2.0版本。 我们在Camel 3中努力研究的问题之一就是使其变得更小,更快。 其中一个方面是配置管理。 您可以按照12要素原则以多种方式完全配置Camel,以使配…

MySQL数据检索+查询+全文本搜索

【0】README0.1)本文部分文字描述转自“MySQL 必知必会”,旨在review“MySQL数据检索查询全文本搜索” 的基础知识;【1】使用子查询1)查询定义:任何sql 语句都是查询。但此术语一般指 select语句;SQL 还允许…

selenium自动化测试_49自动化测试中最常见的Selenium异常

selenium自动化测试开发人员将始终在编写代码时牢记不同的场景,但是在某些情况下,实现可能无法按预期工作。 相同的原则也适用于测试代码,该代码主要用于测试现有产品的功能,发现bug并确保产品100%不受bug影响。 正确…

MySQL的CRUD操作+使用视图

【0】README0.1)本文部分文字描述转自“MySQL 必知必会”,旨在review“MySQL数据检索查询全文本搜索” 的基础知识;【1】插入数据1)insert是用来插入(或添加)行到数据库表的。插入可以用以下几种方式使用&a…

mega x_[MEGA DEAL] 2020年完整的Java Master Class Bundle(96%)

mega x通过超过62个小时的培训来掌握最流行的编程语言,从而树立信誉良好的开发人员职业 嘿,怪胎, 这一周,我们JCG促销专区 ,我们有另一个极端的报价 。我们正在提供一个巨大的96%off的完整2020 Python编程…

tomcat(11)org.apache.catalina.core.StandardWrapper源码剖析

【0】README0.0)本文部分文字描述转自 “how tomcat works”,旨在学习 “tomcat(11)StandardWrapper源码剖析” 的基础知识;0.1)StandardWrapper 是 Catalina中对Wrapper接口的标准实现;要知道,tomcat 中有…

lambda表达式语法_使用类似Lambda的语法作为Java中的表达式进行切换

lambda表达式语法从Java 14开始, switch表达式具有其他Lambda式 ( case ... -> labels )语法,它不仅可以用作语句,还可以用作计算为单个值的表达式。 对于新的类似Lambda的语法,如果标签匹配&#xff0…

装饰器模式(讲解+应用)

转载自 设计模式(5)装饰器模式(讲解应用)目录 装饰器模式为什么使用装饰器模式应用实例 装饰器模式 看到装饰器是在看《Thinking in Java》一书的时候,看到文件读写那边的时候,有提到装饰器模式&#xff0c…

quarkus_使用Quarkus调试容器中的系统测试(视频)

quarkus如果您能够借助容器在本地进行端到端测试应用程序,则可以提高开发效率。 在下面的视频中,我将展示如何使用Quarkus在Docker容器中调试本地系统测试。 这是我关于有效测试的视频课程的Quarkus扩展。 要全面了解,还可以查看以下资源&a…