You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在老旧Tomcat部署JDBC环境的Spring Cloud Config及多环境应用

解决方案:Spring Cloud Config Server(jdbc环境)与客户端(dev/prod环境)的独立配置

这其实是个非常常见的场景——Config Server的运行profile(用来指定它自身的配置存储方式,比如jdbc)和客户端的业务profile(用来拉取对应环境的业务配置,比如dev/prod)是完全独立的,不会互相干扰。下面是具体的实现步骤:

1. 配置并部署Config Server到老旧Tomcat(启用jdbc环境)

首先要确保Config Server以war包形式部署,并且启动时激活jdbc profile:

1.1 打包Config Server为war包

修改Config Server的pom.xml

  • <packaging>设置为war
  • 排除内置Tomcat依赖(避免和外部Tomcat冲突):
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>
  • 确保你的启动类继承SpringBootServletInitializer
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication extends SpringBootServletInitializer {
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(ConfigServerApplication.class);
    }
    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication.class, args);
    }
}

1.2 配置Config Server的jdbc环境

创建application-jdbc.yml(或application-jdbc.properties),配置数据库连接和Config Server的jdbc存储规则:

spring:
  datasource:
    url: jdbc:mysql://your-db-host:3306/config_db?useSSL=false&serverTimezone=UTC
    username: db_user
    password: db_password
    driver-class-name: com.mysql.cj.jdbc.Driver
  cloud:
    config:
      server:
        jdbc:
          # 自定义查询SQL(如果你的表结构和默认不一致)
          sql: SELECT profile, `key`, value FROM config_properties WHERE application = ? AND profile = ? AND label = ?

然后选择一种方式激活jdbc profile:

  • 方式一:在application.yml中默认激活
spring:
  profiles:
    active: jdbc
  • 方式二:通过Tomcat启动参数指定(更灵活,适合不同部署场景)
    在Tomcat的bin/catalina.sh(Linux)或catalina.bat(Windows)中添加:
    # Linux示例
    export JAVA_OPTS="$JAVA_OPTS -Dspring.profiles.active=jdbc"
    
    :: Windows示例
    set JAVA_OPTS=%JAVA_OPTS% -Dspring.profiles.active=jdbc
    

1.3 部署到Tomcat

将打包好的war包放到Tomcat的webapps目录下,启动Tomcat即可。此时Config Server会以jdbc环境运行,从指定数据库中读取配置。

2. 配置客户端Spring Boot应用(启用dev/prod环境)

客户端只需要指定Config Server的地址,以及自己的业务profile即可:

2.1 配置客户端的bootstrap文件

注意:必须使用bootstrap.ymlbootstrap.properties,因为Config Server的配置需要在应用启动早期加载,优先级高于application.yml

示例bootstrap.yml

spring:
  application:
    name: your-client-app-name  # 对应数据库中application字段的值
  cloud:
    config:
      uri: http://your-tomcat-host:8080/config-server-war-name  # Config Server的访问地址
  profiles:
    active: dev  # 或者prod,根据业务环境选择

2.2 确保数据库中存在对应客户端的配置

在Config Server连接的数据库中,确保存在对应客户端的dev/prod环境配置。比如你的配置表结构如下:

applicationprofilelabelkeyvalue
your-client-app-namedevmasterserver.port8081
your-client-app-namedevmasterapp.feature.enabledtrue
your-client-app-nameprodmasterserver.port8082
your-client-app-nameprodmasterapp.feature.enabledfalse

这样客户端启动时,会根据自己的spring.profiles.active值,从Config Server拉取对应环境的配置。

3. 关键注意事项

  • 区分两个profile的作用:Config Server的jdbc profile是用来告诉它“用数据库存储配置”,而客户端的dev/prod profile是用来获取“对应业务环境的配置”,两者完全独立,不会互相覆盖或冲突。
  • Tomcat版本兼容性:老旧Tomcat可能版本较低,比如Tomcat 7仅支持Spring Boot 1.x,Tomcat 8.5+支持Spring Boot 2.x,需要根据Tomcat版本调整Spring Boot的版本。
  • 配置优先级:客户端的bootstrap文件优先级高于application文件,必须用它来配置Config Server相关参数,否则可能出现配置加载失败的情况。

内容的提问来源于stack exchange,提问作者Code Junkie

火山引擎 最新活动