微服务架构-使用Docker进行Spring Boot开发
优锐课学习笔记中研究了如何将容器带入Spring Boot项目。 在这里,我们使用Docker来包含Java REST后端,而无需担心操作系统。一起来看看
AtSea Shop是示例店面应用程序,可以部署在不同的操作系统上,并且可以针对企业开发和运营环境进行自定义。 在较早的帖子中,我讨论了该应用程序的体系结构。 在本文中,我将介绍如何设置开发环境以调试在容器中运行的Java REST后端。
1、构建REST应用
我使用Spring Boot框架快速开发了REST后端,该后端管理AtSea Shop中使用的产品,客户和订单表。 该应用程序利用Spring Boot的内置应用程序服务器,对REST接口的支持以及定义多个数据源的能力。 因为它是用Java编写的,所以与基本操作系统无关,并且可以在Windows或Linux容器中运行。 这使开发人员可以针对异构体系结构进行构建
2、项目设置
AtSea项目使用多阶段构建,这是一项新的Docker功能,它使我可以使用多个映像来构建单个Docker映像,其中包含应用程序所需的所有组件。多阶段构建使用Maven容器构建应用程序JAR文件。然后将JAR文件复制到Java开发工具包映像。因为Maven不包含在应用程序中,所以这使图像更加紧凑和有效。同样,React店面客户端构建在Node映像中,并且还将编译应用程序添加到最终应用程序映像中。
我使用Eclipse编写了AtSea应用程序。如果你需要有关配置IntelliJ或Netbeans进行远程调试的信息,可以查看Docker Labs存储库。你还可以在AtSea应用程序GitHub存储库中签出代码。
我通过克隆存储库构建了应用程序,并通过将Root Directory设置为项目并单击Finish将项目导入到Eclipse中
文件>导入> Maven>现有Maven项目
自从我使用Spring Boot以来,我就利用spring-devtools在应用程序中进行远程调试。我必须将Spring Boot-devtools依赖项添加到pom.xml文件中。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
</dependency>
请注意,当应用程序完全打包为JAR时,将自动禁用开发人员工具。 为了确保在开发期间可以使用devtools,我在spring-boot-maven构建插件中将配置设置为false:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludeDevtools>false</excludeDevtools>
</configuration>
</plugin>
</plugins>
</build>
本示例使用Docker Compose文件,该文件为开发和调试特别需要的容器创建了简化的构建。
version: "3.1"
services:
database:
build:
context: ./database
image: atsea_db
environment:
POSTGRES_USER: gordonuser
POSTGRES_DB: atsea
ports:
- "5432:5432"
networks:
- back-tier
secrets:
- postgres_password
appserver:
build:
context: .
dockerfile: app/Dockerfile-dev
image: atsea_app
ports:
- "8080:8080"
- "5005:5005"
networks:
- front-tier
- back-tier
secrets:
- postgres_password
secrets:
postgres_password:
file: ./devsecrets/postgres_password
networks:
front-tier:
back-tier:
payment:
driver: overlay
Compose文件使用机密提供密码和其他敏感信息(例如证书),而无需依赖环境变量。 尽管该示例使用PostgreSQL,但是应用程序可以使用密码连接到由Spring Boot数据源定义的任何数据库。 从JpaConfiguration.java:
public DataSourceProperties dataSourceProperties() {
DataSourceProperties dataSourceProperties = new DataSourceProperties();
// Set password to connect to database using Docker secrets.
try(BufferedReader br = new BufferedReader(new FileReader("/run/secrets/postgres_password"))) {
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
sb.append(line);
sb.append(System.lineSeparator());
line = br.readLine();
}
dataSourceProperties.setDataPassword(sb.toString());
} catch (IOException e) {
System.err.println("Could not successfully load DB password file");
}
return dataSourceProperties;
}
还要注意,appserver打开端口5005进行远程调试,并且build调用Dockerfile-dev文件来构建打开了远程调试的容器。 这在入口点中设置,该入口点指定调试器的传输和地址。
ENTRYPOINT ["java",
"-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005","-jar",
"/app/AtSea-0.0.1-SNAPSHOT.jar"]
3、远程调试
要在应用程序上启动远程调试,请使用docker-compose-dev.yml文件运行compose。
docker-compose -f docker-compose-dev.yml up --build
Docker将构建映像并启动AtSea Shop数据库和appserver容器。 但是,只有将Eclipse的远程调试器附加到应用程序后,应用程序才能完全加载。 要开始远程调试,请单击运行>调试配置...。
选择“远程Java应用程序”,然后按新按钮创建配置。 在“调试配置”面板中,为配置指定名称,选择AtSea项目,并将主机和端口的连接属性设置为5005。单击“应用”>“调试”。
该应用服务器将启动:
appserver_1|2017-05-09 03:22:23.095 INFO 1 --- [main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
appserver_1|2017-05-09 03:22:23.118 INFO 1 --- [main] com.docker.atsea.AtSeaApp : Started AtSeaApp in 38.923 seconds (JVM running for 109.984)
要测试远程调试,请在ProductController.java上设置一个断点,该断点将返回产品列表。
你可以使用curl或用于发出HTTP请求的首选工具对其进行测试:
curl -H "Content-Type: application/json" -X GET http://localhost:8080/api/product/
Eclipse将切换到调试透视图,你可以在其中逐步执行代码。
AtSea Shop示例显示了使用你和你的团队所熟悉的工具将容器用作常规开发环境的一部分是多么容易。 下载该应用程序以尝试使用容器进行开发,或者将其用作你自己的Spring Boot REST应用程序的基础。
好了各位,以上就是这篇文章的全部内容了,如果这个文章写得还不错,觉得有点东西的话 求点赞求关注❤️ 求分享,感谢大家的支持和认可。
还有就是这我总结出了一些架构视频资料和互联网公司java程序员面试涉及到的绝大部分面试题和答案做成了文档和架构视频资料还有完整高清的java进阶架构学习路线图free分享给大家(包括Dubbo、Redis、Netty、zookeeper、Springcloud、分布式、高并发等架构技术资料),有问题的可以关注找我来交流
推荐阅读
-
在Spring Boot中使用Docker在测试中进行高级功能测试
-
基于Spring Boot 和Spring Cloud和Docker的微服务架构项目实战
-
使用spring-boot-admin对spring-boot服务进行监控的实现方法
-
使用 Spring Cloud 和 Docker 轻松构建微服务架构!
-
使用Spring Cloud和Docker构建微服务架构
-
微服务架构-使用Docker进行Spring Boot开发
-
在Spring Boot中使用Docker在测试中进行高级功能测试
-
基于Spring Boot的微服务应用--微信小程序api开发
-
高手问答:如何使用Spring Boot进行Java EE开发 Spring Boot
-
高手问答:如何使用Spring Boot进行Java EE开发 Spring Boot