当前位置: 首页 > news >正文

HoRain云--高效管理多版本开发环境全攻略

🎬 HoRain 云小助手:个人主页

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

目录

⛳️ 推荐

💻 配置多版本 JDK

🚀 配置多实例 Tomcat

🗃️ 配置多实例 MariaDB/MySQL

🌱 使用 Profile 配置多环境

🧩 整合使用:一个协同工作的示例


在软件开发中,尤其是在需要同时维护多个使用不同技术栈或配置的项目时,高效地管理开发环境是一项非常重要的技能。下面我将为你系统性地介绍 JDK、Tomcat、MariaDB 的多版本/多实例配置,以及如何使用 Spring Profile 实现应用层面的环境隔离。

下表概括了这四种场景的核心配置思路,你可以先建立一个整体印象。

配置场景

核心目标

关键配置方法/工具

一句话要点

多版本JDK

在系统全局或不同项目间灵活切换Java版本

手动:设置JAVA_HOMEPATH环境变量
自动(推荐):使用版本管理工具(如 SDKMAN! 、jEnv )

使用工具可以避免手动修改环境变量的麻烦和错误。

多实例Tomcat

在同一台机器上运行多个互不干扰的Tomcat服务

为每个实例设置独立的CATALINA_BASE目录,指向各自的配置、日志、工作目录 。

通过CATALINA_HOME(主程序)和CATALINA_BASE(实例配置)分离实现“一份程序,多份配置”。

多实例MariaDB

在同一台机器上运行多个独立的数据库实例

为每个实例准备独立的数据目录(datadir)、配置文件(指定不同端口和socket文件)和启动脚本 。

核心是确保每个实例的端口socket文件不同,以避免冲突。

多环境Profile

使应用能根据不同的运行环境(开发、测试、生产)加载不同的配置

在Spring Boot等框架中,通过application-{profile}.yml/properties文件定义特定环境配置,并使用spring.profiles.active属性激活 。

实现配置与代码分离,确保应用在不同环境下行为正确,如连接不同的数据库。

💻 配置多版本 JDK

在不同项目需要使用不同Java版本时,灵活切换JDK是关键。

🚀 配置多实例 Tomcat

当需要在一台服务器上部署多个互不干扰的Web应用或进行不同版本的测试时,可以配置多个Tomcat实例。

  1. 准备主程序和环境:下载并解压一份Tomcat压缩包到某个目录,例如/opt/tomcat-main,这个目录就是CATALINA_HOME

  2. 创建实例目录:为每个实例创建独立的工作目录,例如tomcat-instance-8080tomcat-instance-8081。在每个目录下,创建conf,logs,temp,work,webapps等子目录 。

  3. 复制并修改配置:从CATALINA_HOME/conf复制配置文件(如server.xml)到实例的conf目录。关键修改包括 :

  4. 设置环境变量并启动:通过设置CATALINA_BASE环境变量指向实例目录来启动特定实例 。

    # 启动实例1(监听8080端口) export CATALINA_HOME=/opt/tomcat-main export CATALINA_BASE=/path/to/tomcat-instance-8080 $CATALINA_HOME/bin/startup.sh # 启动实例2(监听8081端口) export CATALINA_BASE=/path/to/tomcat-instance-8081 $CATALINA_HOME/bin/startup.sh

    可以为此编写专门的启动和停止脚本(start.sh,stop.sh),将端口号作为参数传入,使操作自动化 。

🗃️ 配置多实例 MariaDB/MySQL

对于数据库,同样可以通过多实例来隔离不同服务的数据。

  1. 安装MariaDB/MySQL:使用系统包管理器安装即可,如yum install mariadb-server

  2. 准备实例目录结构:为每个实例创建独立的目录,用于存放数据、配置、日志、socket文件等 。

    mkdir -p /mysql/{3306,3307,3308}/{data,etc,socket,log,pid} chown -R mysql:mysql /mysql
  3. 初始化数据目录:使用mysql_install_db命令为每个实例初始化系统数据库 。

    mysql_install_db --datadir=/mysql/3306/data --user=mysql mysql_install_db --datadir=/mysql/3307/data --user=mysql # ... 以此类推
  4. 为每个实例创建配置文件:每个实例需要一个独立的my.cnf文件,主要区分以下参数 :

    # /mysql/3306/etc/my.cnf 示例 [mysqld] port=3306 # 关键:端口唯一 datadir=/mysql/3306/data socket=/mysql/3306/socket/mysql.sock # 关键:socket文件路径唯一 log-error=/mysql/3306/log/mysql.log pid-file=/mysql/3306/pid/mysql.pid # 其他配置(如字符集、缓冲大小等)可根据实例需求单独调整
  5. 启动实例:使用mysqld_safe指定配置文件来启动各个实例 。

    mysqld_safe --defaults-file=/mysql/3306/etc/my.cnf & mysqld_safe --defaults-file=/mysql/3307/etc/my.cnf &

🌱 使用 Profile 配置多环境

在应用代码层面,使用Profile是实现多环境配置的最佳实践,它避免了为不同环境打包不同部署包的问题。

🧩 整合使用:一个协同工作的示例

假设一个场景:你需要同时开发一个使用Java 11的老项目(A)和一个使用Java 17的新项目(B)。

  1. JDK管理:使用SDKMAN!,在终端A中运行sdk use java 11.0.21-amzn,在终端B中运行sdk use java 17.0.9-tem。或者在各自的IDE中为项目A和B分别指定JDK 11和17。

  2. 中间件与数据库:项目A和B都需要独立的Tomcat和数据库进行测试。

  3. 应用配置:项目A和B的配置文件(如application.properties)中,通过Profile设置不同数据源。

  4. 部署与运行:分别将项目A和B的WAR包部署到对应的Tomcat实例上,并启动这两个Tomcat实例和两个MariaDB实例。这样,两个项目就在同一台机器上完全隔离地运行起来了。

通过上述方法,你可以清晰地管理复杂的开发部署环境。希望这些具体的方案能帮助你更好地开展工作!如果你对某个细节有更深入的疑问,我很乐意继续探讨。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

http://www.cnnetsun.cn/news/832907.html

相关文章:

  • U+0000 – U+007F的庖丁解牛
  • 跨平台统一测试框架构建方法论
  • ERP系统升级:企业运营流程的华丽转身
  • 【Matlab】MATLAB rand函数:从随机矩阵生成到实验数据模拟,解锁随机数应用核心
  • VirtualLab Fusion应用:随机分布公差分析
  • 信创 + AI 双轮驱动:2026 计算机板块高景气赛道前瞻
  • 工程设计类学习(DAY9):印刷电路板(PCB)材料选择、工艺特性与制造技术综合详解
  • pythondjango基于python技术的学生成绩管理系统的设计与开发
  • GitHub 热榜项目 - 日榜(2026-01-27)
  • 杰理之绑定功能中TX生成配对码的方式RX无法获取配对码问题【篇】
  • 杰理之常用工具下载获取方式【篇】
  • 基于PHP、asp.net、java、Springboot、SSM、vue3的可视化流量统计分析系统的设计与实现
  • 11110000 10011111 10011001 10000010的庖丁解牛
  • 自动化测试代码重构黄金法则:提升效率与可维护性的实战指南
  • 椰子树病害检测数据集VOC+YOLO格式2601张4类别
  • GLM-Image小白入门:无需代码基础,10分钟学会AI图像生成
  • MDK目标选项配置详解:适合新手的系统学习指南
  • ChatGLM3-6B部署教程:Kubernetes集群中ChatGLM3-6B服务编排
  • ms-swift + Mistral:高性能小模型微调体验
  • AI读脸术与摄像头对接:RTSP视频流实时分析部署案例
  • 本地部署更安全:GLM-4.6V-Flash-WEB保护数据隐私
  • AI智能二维码工坊功能演示:实时生成并扫描验证全流程
  • I2C读写EEPROM代码:新手入门必看的基础教程
  • Qwen3-4B Instruct-2507惊艳案例:自动将会议录音文字稿转为行动项清单
  • YOLOv8模型加密部署:防止反向工程实战方案
  • AI智能文档扫描仪社区反馈:用户最关心的五个问题官方解答
  • 零基础入门PyTorch开发环境:手把手教你使用PyTorch-2.x-Universal-Dev-v1.0镜像
  • 教育场景落地:用VibeVoice生成教师与学生互动语音
  • [特殊字符] 音乐流派分类神器:5分钟搭建Web应用,一键识别16种音乐风格
  • Glyph视觉推理落地应用:如何实现高效文本语义建模?