news 2026/6/10 20:45:51

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 20:53:14

微服务架构下的 UI 测试策略

在微服务架构中,用户界面(UI)测试作为端到端(E2E)测试的核心环节,直接关系到最终用户体验和业务目标实现。然而,微服务的分布式、多语言和独立部署特性,为 UI 测试带来了独特挑战。本…

作者头像 李华
网站建设 2026/6/10 14:27:06

VirtualLab Fusion应用:参数变化分析仪

摘要 在复杂光学系统的设计、优化和公差处理过程中,通常需要分析一组不同系统参数的特性,而不仅仅是单一配置。参数运行是在所需参数空间内扫描系统参数的指定工具。但它无法从可进一步处理的单个结果中定义和评估优化函数。新的参数变化分析仪正是弥补这…

作者头像 李华
网站建设 2026/6/10 15:59:10

HoRain云--Go语言条件语句全解析

🎬 HoRain云小助手:个人主页 🔥 个人专栏: 《Linux 系列教程》《c语言教程》 ⛺️生活的理想,就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!…

作者头像 李华
网站建设 2026/6/10 3:58:51

HoRain云--Go语言函数详解:从入门到精通

🎬 HoRain云小助手:个人主页 🔥 个人专栏: 《Linux 系列教程》《c语言教程》 ⛺️生活的理想,就是为了理想的生活! ⛳️ 推荐 前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!…

作者头像 李华
网站建设 2026/6/9 21:08:34

k8s 部署 Sentinel-dashboard 1.8.9

k8s 部署 Sentinel-dashboard 1.8.9 一.拉取镜像并推送到私库 这里选择的是docker hub已经有人制作好的Sentinel镜像 docker pull bladex/sentinel-dashboard:1.8.9 #检查是否拉取成功 docker images | grep bladex/sentinel#重新给镜像打tag docker tag bladex/sentinel-da…

作者头像 李华