Docker Compose 中spring boot服务连接 mysql

  Docker compose 启动两个docker ,一个是mysql, 另一个是spring boot 服务。spring boot 服务要连接mysql8 。传统的做法: 在application.properties 文件中配置 

spring.datasource.url=jdbc:mysql://127.0.0.1:3306/mydatabase
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

   但 在docker compose 环境下,mysql 的docker 是动态的一个ip地址,spring boot 是无法使用固定的ip 连接。

正确的做法:

一、制做mysql 的Dockerfile 

FROM docker.io/mysql MAINTAINER gym "393909065@qq.com" EXPOSE 3306
ENV AUTO_RUN_DIR /docker-entrypoint-initdb.d
# 数据库创建脚本
ENV INIT_SQL admin.sql
COPY admin.sql ./$INIT_SQL $AUTO_RUN_DIR/
RUN chmod 777 $AUTO_RUN_DIR/$INIT_SQL

备: 脚本文件中不包括 create database , 创建数据库命令在docker compose 定义。

二、制做spring boot 服务 Dockerfile

FROM openjdk:18
ADD *.jar app.jar
ENTRYPOINT ["java", "-Xms1024m", "-Xmx1024m", "-Dspring.profiles.active=dev", "-jar", "/app.jar"]
EXPOSE 8081

三、制做 docker compose 文件

version: '3.7'
services:ws1:container_name: ws1build:context: ./ws1dockerfile: Dockerfileports:- 9008:8081environment:- SPRING_DATASOURCE_URL=jdbc:mysql://mysqldb:3306/${MYSQL_DATABASE}- SPRING_DATASOURCE_USERNAME=root- SPRING_DATASOURCE_PASSWORD=${MYSQL_PASSWORD}volumes:- ./ws1/logs:/logsdepends_on:mysqldb:condition: service_healthynetworks:- springboot-mysql-networkmysqldb:container_name: mysqldbbuild:context: ./mysqldockerfile: prod.Dockerfilerestart: alwayscommand: ['--character-set-server=utf8mb4','--collation-server=utf8mb4_unicode_ci','--default-authentication-plugin=caching_sha2_password'            ]environment:- MYSQL_DATABASE=${MYSQL_DATABASE}- MYSQL_ROOT_PASSWORD=${MYSQL_PASSWORD}volumes:- ./mysql/data:/var/lib/mysqlnetworks:- springboot-mysql-networkhealthcheck:test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]retries: 10interval: 3stimeout: 30snetworks:springboot-mysql-network:name: springboot-mysql-network

四、.env 文件


MYSQL_DATABASE=mysql_db MYSQL_PASSWORD=123456 

为什么要用.env , 在docker compose 文件中直接填入不行吗?答案是不行的。 因为spring boot 是注入机制。docker 启动后,会根据depends_on  的docker 获取该docker 的ip。通过.env 的方式替换时, 重新注入环境变量中的mysql host。

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

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

相关文章

java springboot vue elementui python django vue 30套源代码

java springboot vue elementui python django vue 30套源代码 全套源码 Springboot vue3 elementplus 后台通用权限系统 代码生成器 (源码教程开发环境) Springboot vue2 elementui 后台通用权限系统 代码生成器(源码教程开发环境) Springboot vue2 elementui 物品出入库管…

夜莺浏览日志、filebeat采集日志(四)

文章目录 一、elasticsearch二、filebeat三、日志分析 一、elasticsearch docker启动 docker run -d -p 9200:9200 -p 9300:9300 --restartalways -e ES_JAVA_OPTS"-Xms512m -Xmx512m" \ -e discovery.typesingle-node -e xpack.security.enabledtrue -e ELASTIC_P…

plantegg-10+倍性能提升全过程–优酷账号绑定淘宝账号的TPS从500到5400的优化历程

原文地址:https://plantegg.github.io/2018/01/23/10%E5%80%8D%E6%80%A7%E8%83%BD%E6%8F%90%E5%8D%87%E5%85%A8%E8%BF%87%E7%A8%8B/ 背景说明 2016年的双11在淘宝上买买买的时候,天猫和优酷土豆一起做了联合促销,在天猫双11当天购物满XXX元就赠送优酷会…

什么是生态智慧公厕@光明源

生态智慧公厕是一种结合生态环保理念和智能科技的公厕设施。这种公厕旨在提供更加环保、节能、可持续的卫生解决方案,同时通过智能化技术提升管理效率和用户体验。生态智慧公厕通常具有以下特点: 节能环保:生态智慧公厕采用了各种节能环保技…

npm淘宝镜像源更新

目录 前情提要: 背景: 镜像源更新: 清楚缓存: 直接切换镜像源: 补充: 错误解释: 解决方法: 前情提要: 2024 /1 /22 ,registry.npm.taobao.org淘宝镜像源的SSL…

【面试】Elasticsearch 在部署时,对 Linux 的设置有哪些优化方法?

Elasticsearch 在部署时,对 Linux 的设置有哪些优化方法? Elasticsearch是一个分布式搜索和分析引擎,它在Linux环境下的性能和稳定性可以通过一些优化方法进行提升。以下是一些针对Linux环境下Elasticsearch部署的优化方法: 1. 内…

uniapp 未配置appkey或配置错误的解决

报错解决:未配置appkey或配置错误 首先:HbuilderX Android sdk 3.1.10版本起需要申请Appkey 配置Appkey:打开Androidmanifest.xml, 导航到Application节点,创建meta-data节点,name为dcloud_appkey&#x…

快速部署docker-compose环境

快速部署docker-compose环境 快速安装docker安装docker-compose 快速安装docker 检查环境: # 移除旧版本 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engi…

【2024系统架构设计】案例分析- 3 数据库

目录 一 基础知识 二 真题 一 基础知识 1 ORM ORM(Object—Relationl Mapping

Java学习笔记(22)

缓冲流 真正操作数据的还是基本流 字节缓冲流 缓冲区是长度为8192的字节缓冲区 byte[] 8K Bufferedininputstream 读取数据就是把数据放到缓冲区中,字节长度默认长度8192 关流只需要关缓冲流,因为在底层会关基本流 一次读多个字节 字节缓冲流提高效…

XR虚拟直播间,引领创新风潮,打破直播局限!

随着互联网技术日新月异的发展,直播行业也迎来了蓬勃发展的春天。然而,大多数直播间在吸引观众眼球和延长用户观看时长方面,仍然面临着巨大的挑战。正是在这样的背景下,XR虚拟直播系统应运而生,以其多维度的直播场景、…

自然语言处理3(NLP)—— 机器学习

1. 自然语言处理在机器学习领域的主要任务 自然语言处理(NLP)在机器学习领域中扮演着至关重要的角色,旨在使计算机能够理解、解释和生成人类语言。以下是NLP在机器学习领域中的主要任务及其分类方法: 1.1 按照功能类型分类 1.1.…

Nacos的搭建和使用——SpringCloud Alibaba

1. 概要说明 在使用Nacos之前,请在你的虚拟机中下载好Nacos,再进行连接本机使用 port:8848 本机访问地址:http://{虚拟机ip}:8848/nacos/ 访问账号密码:nacos/nacos 2. Nacos的作用 2.1 服务发现中心 微服务将自身注册至Nacos&am…

Linux(centos7)部署hive

前提环境: 已部署完hadoop(HDFS 、MapReduce 、YARN) 1、安装元数据服务MySQL 切换root用户 # 更新密钥 rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysqL-2022 # 安装Mysql yum库 rpm -Uvh http://repo.mysql.com//mysql57-community-release-el7-7.noarch.rpm # yu…

Netty服务端基本启动流程源码刨析

前言: 希望看这篇文章之前对Java Nio编程比较熟悉,并有用过Netty开发简单代码 服务端代码 先大致说一下NioEventLoopGroup组件的作用,可以把它看是作内部维护了一个NioEventLoop数组的对象,它的构造方法的参数用来指定维护数组的大小。NioEve…

【Flutter 面试题】 Dart 是不是单线程模型?是如何运行的?

【Flutter 面试题】 Dart 是不是单线程模型?是如何运行的? 文章目录 写在前面口述回答补充说明示例:异步编程示例:使用 Isolates 处理计算密集型任务总结 写在前面 🙋 关于我 ,小雨青年 👉 CSD…

Echarts之x轴,Y轴配置项大全

ECharts是一个强大的数据可视化库,提供了丰富的配置项来定制图表的x轴和y轴。下面是ECharts中x轴和y轴的配置项大全: xAxis配置项: type:轴类型,可选值有:“value”(数值轴), “cat…

C++经典面试题目(二)

1. C中,static关键字有什么作用? 在C中,static关键字有多种作用,包括限定作用域、保持变量内容持久化和修饰类成员等。以下是static关键字在C中的主要作用: 限定作用域:当变量、函数或类成员被声明为stat…

数据库表名和字段名,为什么忽略大小写?为什么采用下换线分割单词?

数据库表名和字段名,为什么忽略大小写 在数据库设计和使用中,表名和字段名的大小写敏感性是由数据库管理系统(DBMS)的配置和操作系统决定的。有些数据库系统默认是区分大小写的,而有些则不区分。 在实际操作中&#x…

docker 的网络管理

docker应用自带了三种类型的网络,然后我们自己也能自定义网络 roottest-virtual-machine:~# docker network ls NETWORK ID NAME DRIVER SCOPE 4c3e28760cff bridge bridge local afd1493dc119 host host local 5f200e2eaf22 n…