在 Spring 应用程序中找不到 OptaPlanner SolverManager Bean

2024-03-03

我对使用 Spring 相当陌生,并且遇到了一个似乎无法解决的问题。我正在尝试使用一个名为优化规划器 https://docs.optaplanner.org/7.6.0.Final/optaplanner-docs/html_single/index.html#plannerIntroduction。在这种情况下,我或多或少地遵循一个简单的课程安排程序,视频是我正在做的部分发生在 51:00。

我的问题是,该过程的一个步骤需要依赖注入,当我构建/运行 Spring 应用程序时,我收到以下错误:

Description:

Field solverManager in com.java.optaplex.resource.MainResource required a bean of type 'org.optaplanner.core.api.solver.SolverManager' that could not be found.

The injection point has the following annotations:
    - @javax.inject.Inject()

Action:

Consider defining a bean of type 'org.optaplanner.core.api.solver.SolverManager' in your configuration.

Process finished with exit code 1

我已经使用 Gradle 来管理我的 optaplanner 包,我可以看到依赖项存在(它是一个名为 SolverManager 的接口)。我不明白为什么它无法找到/生成 bean。我假设 Spring 会动态生成 bean,就像使用 @Autowired 装饰器时创建 JPA 存储库的 bean 一样。我尝试将 SolverManager 代码复制并粘贴到项目根目录下的自己的文件中,并在其上尝试了一些装饰器(例如 @Component),希望 Spring 能够检测到它,但它仍然抛出相同的错误,我不确定什么去做。

我在 GitHub 上创建了一个非常简单的演示应用程序here https://github.com/kriegsmaschine/optaplanner.simple.demo有错误。错误在文件中src/main/java/com/java/optaplex/resource/MainResource.java

另外,在 IntelliJ 中 SolverManager 实例求解器管理器(参见下面的代码)突出显示并表示:

Could not autowire. No beans of 'SolverManager<Test, Long>' type found.

MainResource.java:

package com.java.optaplex.resource;

import com.java.optaplex.pojo.Test;
import org.optaplanner.core.api.solver.SolverManager;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.inject.Inject;

@RestController
@RequestMapping("/api")
public class MainResource {

    // THE OFFENDING LINE IS HERE
    @Inject
    SolverManager<Test, Long> solverManager;

    @GetMapping("/test")
    public Test test () {
        return new Test("Result message here");
    }

}

为了清楚起见,我在求解器管理器声明中的测试类是:

测试.java

package com.java.optaplex.pojo;

public class Test {

    private String message;

    public Test(String message) {
        this.message = message;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}

我意识到我的示例代码实际上并没有使用 SolverManager,我只是希望构建时的错误停止,以便我可以继续开发它。我只是想提供一个导致错误的非常简单的案例。

最后,我的 Gradle 依赖项如下所示:

构建.gradle:

plugins {
    id 'org.springframework.boot' version '2.2.6.RELEASE'
    id 'io.spring.dependency-management' version '1.0.9.RELEASE'
    id 'java'
    id 'war'
}

group = 'com.java'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
    mavenCentral()
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-web'
    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
    testImplementation('org.springframework.boot:spring-boot-starter-test') {
        exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
    }

    // https://mvnrepository.com/artifact/org.optaplanner/optaplanner-core
    compile group: 'org.optaplanner', name: 'optaplanner-core', version: '7.36.1.Final'
    compile group: 'javax.inject', name: 'javax.inject', version: '1'
}

test {
    useJUnitPlatform()
}


要使其工作,您只需更换@Inject注释与@Autowire.

从最新版本的 Spring 开始,最佳实践是使用构造函数依赖注入而不是@Autowire(不再需要注释,因为 Spring 将自动装配 bean。

尝试这个:

@RestController
@RequestMapping("/api")
public class MainResource {

    // Just the definition here
    private SolverManager<Test, Long> solverManager;

    pubilc MainResource(SolverManager<Test, Long> solverManager) {

     // When Spring will start, the bean will be injected here and become 
     // available in this class
     this.solverManager = solverManager;

    }

    @GetMapping("/test")
    public Test test () {
         // .....
    }

    // Other controller methods .... 

}

我正在使用 IntelliJ,它也向我报告错误。但我使用的代码与我在这个答案中发布的代码相同并且有效。

正如您所说,SolverManagerbean 是在 optaplanner 工件内配置的,我怀疑这里的问题只是使用了错误的注释。

IDE 错误也困扰着我!但目前它有效,我将这样保留它。如果我能找到解决方案,那么我会将其添加到此处。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Spring 应用程序中找不到 OptaPlanner SolverManager Bean 的相关文章

  • java.lang.Class: 在 java 程序中初始化 log4j 属性文件时出错

    我正在尝试使用 log4j 运行独立的 java 程序 但在调试时收到以下消息 控制台上没有 log4j 相关日志 log Logger 1343 java lang Class ERROR in 18b4aac2 有人可以建议这里出了什么
  • JTree 节点不会被直观地选择

    不知何故 我无法为我的 JTree 节点启用 选择突出显示 我正在我的项目中使用自定义单元格渲染器 这很可能导致此问题 这是完整的渲染器类代码 protected class ProfessionTreeCellRenderer exten
  • 使用 Spring 时实例化对象,用于测试与生产

    使用 Spring 时 应该使用 Spring 配置 xml 来实例化生产对象 并在测试时直接实例化对象 这样的理解是否正确 Eg MyMain java package org world hello import org springf
  • MI设备中即使应用程序被杀死,如何运行后台服务

    您好 我正在使用 alaram 管理器运行后台服务 它工作正常 但对于某些 mi 设备 后台服务无法工作 我使用了服务 但它无法工作 如何在 mi 中运行我的后台服务 MI UI有自己的安全选项 所以你需要的不仅仅是上面提到的粘性服务 你需
  • Android - 除了普通 SSL 证书之外还验证自签名证书

    我有一个通过 SSL 调用 Web 服务的 Android 应用程序 在生产中 我们将拥有由受信任的 CA 签名的普通 SSL 证书 但是 我们需要能够支持自签名证书 由我们自己的 CA 签名 我已经成功实施了接受自签名证书的建议解决方案
  • PropertySources 中各种源的优先级

    Spring引入了新的注释 PropertySources对于所有标记为的类 Configuration since 4 0 需要不同的 PropertySource作为论证 PropertySources PropertySource c
  • Spring Stomp over Websocket:流式传输大文件

    我的SockJs客户端在网页中 发送帧大小为16K的消息 消息大小限制决定了我可以传输的文件的最大大小 以下是我在文档中找到的内容 Configure the maximum size for an incoming sub protoco
  • 使用 Java 在浏览器中下载 CSV 文件

    我正在尝试在 Web 应用程序上添加一个按钮 单击该按钮会下载一个 CSV 文件 该文件很小 大小仅约 4KB 我已经制作了按钮并附加了一个侦听器 文件也准备好了 我现在唯一需要做的就是创建单击按钮时下载 csv 文件的实际事件 假设 fi
  • 如何将 XMP XML 块序列化为现有的 JPEG 图像?

    我有许多 JPEG 图像 其中包含损坏的 XMP XML 块 我可以轻松修复这些块 但我不确定如何将 固定 数据写回图像文件 我目前正在使用 JAVA 但我愿意接受任何能让这项任务变得容易的事情 这是目标关于 XMP XML 的另一个问题
  • cucumber-junit-platform-engine 中的功能文件发现

    In cucumber junit我使用的库 CucumberOptions定义功能文件位置 package com mycompany cucumber import cucumber api CucumberOptions import
  • 让JScrollPane控制多个组件

    对于我的应用程序 我正在设计一个脚本编辑器 目前我有一个JPanel其中包含另一个JPanel保存行号 位于左侧 以及JTextArea用于允许用户输入代码 位于右侧 目前 我已经实施了JScrollPane on the JTextAre
  • 如何在keycloak中动态编辑standalone.xml文件

    我正在尝试通过 docker 编辑standalone xml 并尝试添加 但 keycloak 正在使用它standalone xml 但我可以看到standalone xml 文件中的更改 我需要在standalone xml 文件中添
  • 在 Selenium WebDriver 上如何从 Span 标签获取文本

    在 Selenium Webdriver 上 如何从 span 标记检索文本并打印 我需要提取文本UPS Overnight Free HTML代码如下 div id customSelect 3 class select wrapper
  • ExceptionHandler 不适用于 Throwable

    我们的应用程序是基于 Spring MVC 的 REST 应用程序 我正在尝试使用 ExceptionHandler 注释来处理所有错误和异常 I have ExceptionHandler Throwable class public R
  • 如何在android sdk上使用PowerMock

    我想为我的 android 项目编写一些单元测试和仪器测试 然而 我遇到了一个困扰我一段时间的问题 我需要模拟静态方法并伪造返回值来测试项目 经过一些论坛的调查 唯一的方法是使用PowerMock来模拟静态方法 这是我的 gradle 的一
  • 我想要一个 Java 阿拉伯语词干分析器

    我正在寻找阿拉伯语的 Java 词干分析器 我找到了一个名为 AraMorph 的库 但它的输出是无法控制的 并且它会形成不需要的单词 还有其他阿拉伯语词干分析器吗 这是新的阿拉伯语词干分析器 Assem 的阿拉伯语轻词干分析器 http
  • Path2D 上的鼠标指针检测

    我构建了一个Path2D http docs oracle com javase 7 docs api java awt geom Path2D html表示由直线组成的未闭合形状 我希望能够检测何时单击鼠标并且鼠标指针靠近路径 在几个像素
  • Java中获取集合的幂集

    的幂集为 1 2 3 is 2 3 2 3 1 2 1 3 1 2 3 1 假设我有一个Set在爪哇中 Set
  • MongoDB Java 驱动程序:MongoCore 驱动程序与 MongoDB 驱动程序与 MongoDB 异步驱动程序

    MongoDB Java 驱动程序有三种不同的驱动程序选项 核心驱动 MongoDB 驱动程序 MongoDB 异步驱动程序 The 驱动程序描述页面 https docs mongodb org ecosystem drivers jav
  • java中如何找到class文件的包

    我正在编写一个使用 class 文件的 java 程序 我希望能够读取文件系统上的 class 文件 使用 InputStream 并确定它所在的包 该 class 文件可能不在一个好的包目录结构中 它可能位于某个随机位置 我怎样才能做到这

随机推荐