You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Maven构建Spring应用无法加载application-production.properties问题

Spring Boot + Vaadin 部署到 Azure 未加载生产环境配置问题

问题概述

本地通过设置 spring.profiles.active=production 启动应用时,能正常连接SQL Server数据库;但通过Maven构建后部署到Azure Container Apps,应用未加载生产配置(数据无法写入数据库),且代码已确认成功部署。

本地环境

  • 生产模式:Java 19,指定profile为production,启动参数 -Dspring.profiles.active=production
  • 开发模式:Java 19,指定profile为development

部署命令

开发部署

mvn install -Pproduction;
az login;
az containerapp up --resource-group rg-group -n group-app-vaadin --source .;

生产部署

mvn install -Pproduction -Dspring.profiles.active=production; 
az login;
az containerapp up --resource-group rg-group -n group-app-vaadin --source .;

Dockerfile 配置

FROM eclipse-temurin:21-jre
COPY target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "/app.jar"]

配置文件

application.properties

server.port=${PORT:8080}
logging.level.org.atmosphere=warn
spring.mustache.check-template-location=false

# Launch the default browser when starting the application in development mode
vaadin.launch-browser=true

# increases max file size the server will accept
spring.servlet.multipart.max-file-size=30MB
spring.servlet.multipart.max-request-size=30MB

# To improve the performance during development.
vaadin.allowed-packages=com.vaadin,org.vaadin,com.GROUP,de.f0rce.signaturepad
spring.jpa.defer-datasource-initialization=true
spring.jpa.show-sql=true

application-production.properties

spring.jpa.defer-datasource-initialization=false
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.SQLServer2012Dialect
spring.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
spring.datasource.url=jdbc:sqlserver://GROUP.database.windows.net:1433;encrypt=true;trustServerCertificate=false;loginTimeout=30;database=GROUP-db;
spring.datasource.username=USERNAME
spring.datasource.password=PASSWORD

pom.xml(核心部分)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.group.app</groupId>
    <artifactId>group-webapp</artifactId>
    <name>Group Web App</name>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <properties>
        <java.version>17</java.version>
        <vaadin.version>24.4.6</vaadin.version>
    </properties>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.7</version>
    </parent>

    <build>
        <defaultGoal>spring-boot:run</defaultGoal>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>

            <plugin>
                <groupId>com.vaadin</groupId>
                <artifactId>vaadin-maven-plugin</artifactId>
                <version>${vaadin.version}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>prepare-frontend</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <profile>
            <id>production</id>
            <dependencies>
                <dependency>
                    <groupId>com.vaadin</groupId>
                    <artifactId>vaadin-core</artifactId>
                    <exclusions>
                        <exclusion>
                            <groupId>com.vaadin</groupId>
                            <artifactId>vaadin-dev</artifactId>
                        </exclusion>
                    </exclusions>
                </dependency>
            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>com.vaadin</groupId>
                        <artifactId>vaadin-maven-plugin</artifactId>
                        <version>${vaadin.version}</version>
                        <executions>
                            <execution>
                                <goals>
                                    <goal>build-frontend</goal>
                                </goals>
                                <phase>compile</phase>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>

        <profile>
            <id>development</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <activatedProperties>development</activatedProperties>
            </properties>
        </profile>
    </profiles>
</project>

已尝试的排查步骤

  • 尝试调试Maven构建过程,查看配置文件加载情况,未取得有效结果
  • 执行 mvn clean 和 mvn clean -Pproduction 后重新构建部署
  • 将 application.properties 内容替换为 application-production.properties 的配置,部署后问题依旧

问题根源及解决方案

1. Maven构建参数未传递到运行阶段

Maven构建时的 -Dspring.profiles.active=production 参数仅作用于构建过程,不会被打包到Jar包中。Azure部署时启动Jar包未传入该参数,应用默认加载development profile(pom中development profile为默认激活状态)。

解决办法:

  • 方法一:修改Dockerfile添加启动参数
    直接在启动命令中指定生产环境profile:

    FROM eclipse-temurin:21-jre
    COPY target/*.jar app.jar
    EXPOSE 8080
    ENTRYPOINT ["java", "-Dspring.profiles.active=production", "-jar", "/app.jar"]
    
  • 方法二:通过Azure配置环境变量
    使用CLI或Azure门户设置环境变量,Spring Boot会自动读取 SPRING_PROFILES_ACTIVE:

    az containerapp update --resource-group rg-group --name group-app-vaadin --set environmentVariables[0].name=SPRING_PROFILES_ACTIVE --set environmentVariables[0].value=production
    

2. 确认依赖完整性

检查pom.xml是否已添加SQL Server驱动依赖:

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <scope>runtime</scope>
</dependency>

若缺少驱动,即使加载生产配置也无法连接数据库。

3. 验证配置生效状态

部署后查看Azure Container Apps日志,搜索关键字 The following profiles are active:,确认输出包含 production。若仍显示development,需重新检查启动参数或环境变量配置。


内容的提问来源于stack exchange,提问作者Kendricks L Camille

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 20:59:50