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

执行docker-compose up时Spring Boot应用启动失败(OAuth2授权服务问题)

问题:Docker启动Spring Boot应用时出现方法不存在错误

执行docker-compose up启动Spring Boot应用时,报错提示调用不存在的deviceAuthorizationEndpoint方法,但本地直接运行应用正常,且能在IntelliJ外部库中找到该方法。

操作流程

  • 执行打包命令:./mvnw clean package -DskipTests
  • 在src/main/docker目录创建Dockerfile:
FROM openjdk:17-oracle
ARG JAR_FILE=*.jar
COPY ${JAR_FILE} application.jar
ENTRYPOINT ["java", "-jar", "application.jar"]
  • docker-compose.yml内容:
version: '2'

services:
  app:
    image: 'docker-spring-boot-postgres:latest'
    build:
      context: .
    container_name: app
    depends_on:
      - db
    environment:
      - SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/compose-postgres
      - SPRING_DATASOURCE_USERNAME=compose-postgres
      - SPRING_DATASOURCE_PASSWORD=compose-postgres
      - SPRING_JPA_HIBERNATE_DDL_AUTO=update

  db:
    image: 'postgres:13.1-alpine'
    container_name: db
    environment:
      - POSTGRES_USER=compose-postgres
      - POSTGRES_PASSWORD=compose-postgres

错误日志

app  | 
app  | ***************************
app  | APPLICATION FAILED TO START
app  | ***************************
app  | 
app  | Description:
app  | 
app  | An attempt was made to call a method that does not exist. The attempt was made from the following location:
app  | 
app  |     org.springframework.boot.autoconfigure.security.oauth2.server.servlet.OAuth2AuthorizationServerPropertiesMapper.asAuthorizationServerSettings(OAuth2AuthorizationServerPropertiesMapper.java:56)
app  | 
app  | The following method did not exist:
app  | 
app  |     'org.springframework.security.oauth2.server.authorization.settings.AuthorizationServerSettings$Builder org.springframework.security.oauth2.server.authorization.settings.AuthorizationServerSettings$Builder.deviceAuthorizationEndpoint(java.lang.String)'
app  | 
app  | The calling method's class, org.springframework.boot.autoconfigure.security.oauth2.server.servlet.OAuth2AuthorizationServerPropertiesMapper, was loaded from the following location:
app  | 
app  |     jar:file:/application.jar!/BOOT-INF/lib/spring-boot-autoconfigure-3.1.0.jar!/org/springframework/boot/autoconfigure/security/oauth2/server/servlet/OAuth2AuthorizationServerPropertiesMapper.class
app  | 
app  | The called method's class, org.springframework.security.oauth2.server.authorization.settings.AuthorizationServerSettings$Builder, is available from the following 
app  |
app  |
app  | Action:
app  |
app  | Correct the classpath of your application so that it contains compatible versions of the classes org.springframework.boot.autoconfigure.security.oauth2.server.servlet.OAuth2AuthorizationServerPropertiesMapper and org.springframework.security.oauth2.server.authorization.settings.AuthorizationServerSettings$Builder
app  |
app exited with code 1

已尝试操作

  • 执行mvn clean install
  • 清除IntelliJ缓存
  • 检查依赖版本
    问题依旧存在,当前使用Spring Boot版本3.1.0,spring-security-oauth2-authorization-server版本1.1.0。

完整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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.1.0</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.online-shop</groupId>
    <artifactId>OnlineShop</artifactId>
    <version>1.1.0</version>
    <name>OnlineShop</name>
    <description>Online shop project</description>
    <properties>
        <java.version>17</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-oauth2-authorization-server</artifactId>
            <version>1.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.security.oauth</groupId>
            <artifactId>spring-security-oauth2</artifactId>
            <version>2.5.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-api</artifactId>
            <version>0.11.5</version>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-impl</artifactId>
            <version>0.11.5</version>
        </dependency>
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt-jackson</artifactId>
            <version>0.11.5</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <dependency>
            <groupId>org.hibernate.validator</groupId>
            <artifactId>hibernate-validator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>7.7.0</version>
            <scope>compile</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework.amqp/spring-rabbit -->
        <dependency>
            <groupId>org.springframework.amqp</groupId>
            <artifactId>spring-rabbit</artifactId>
            <version>3.0.2</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-messaging -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-messaging</artifactId>
            <version>6.0.9</version>
        </dependency>
    </dependencies>

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

</project>

解决建议

  1. 版本不兼容是核心问题:Spring Boot 3.1.0的自动配置类OAuth2AuthorizationServerPropertiesMapper会调用deviceAuthorizationEndpoint方法,但该方法是在spring-security-oauth2-authorization-server 1.2.0版本才新增的,你当前使用的1.1.0版本没有这个方法。
  2. 修改依赖版本:将pom.xml中的spring-security-oauth2-authorization-server版本改为1.2.0:
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-oauth2-authorization-server</artifactId>
    <version>1.2.0</version>
</dependency>
  1. 重新构建镜像:执行./mvnw clean package -DskipTests重新打包,再运行docker-compose up --build重新构建并启动容器。
  2. 排查依赖冲突:如果修改版本后仍有问题,执行./mvnw dependency:tree查看依赖树,确认是否有其他依赖引入了旧版本的spring-security-oauth2-authorization-server,如有则通过<exclusions>排除冲突依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 15:51:59