OptaPlanner在Spring Boot中出现Java反射错误

汤尼

我只是试图在Spring Boot中运行一个OptaPlanner项目,但是在《 Spring OptaPlanner用户指南》中只有非常简单的文字。

实际上,我认为将所有域对象,配置文件和Drools文件从OptaPlanner项目复制到Spring Boot项目非常容易,而无需任何更改,但是唯一的问题是如何调用Solversolve方法。

我在Spring Boot启动后使用CommandLineAppStartupRunner实现CommandLineRunner接口的类(名为使它运行,然后solve在其run方法中调用method。最后,我得到如下异常:

Caused by: java.lang.IllegalArgumentException: Can not set org.optaplanner.core.api.score.buildin.hardmediumsoft.HardMediumSoftScore field springbootcloudbalance.domain.CloudBalance.score to springbootcloudbalance.domain.CloudBalance
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:167)
at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:171)
at sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:58)
at sun.reflect.UnsafeObjectFieldAccessorImpl.get(UnsafeObjectFieldAccessorImpl.java:36)
at java.lang.reflect.Field.get(Field.java:393)
at org.optaplanner.core.impl.domain.common.accessor.ReflectionFieldMemberAccessor.executeGetter(ReflectionFieldMemberAccessor.java:54)
at org.optaplanner.core.impl.domain.solution.descriptor.SolutionDescriptor.getScore(SolutionDescriptor.java:1071)
at org.optaplanner.core.impl.score.director.AbstractScoreDirector.cloneSolution(AbstractScoreDirector.java:212)
at org.optaplanner.core.impl.solver.scope.DefaultSolverScope.setWorkingSolutionFromBestSolution(DefaultSolverScope.java:230)
at org.optaplanner.core.impl.solver.AbstractSolver.solvingStarted(AbstractSolver.java:75)
at org.optaplanner.core.impl.solver.DefaultSolver.solvingStarted(DefaultSolver.java:210)
at org.optaplanner.core.impl.solver.DefaultSolver.solve(DefaultSolver.java:190)
at springbootcloudbalance.CommandLineAppStartupRunner.run(CommandLineAppStartupRunner.java:55)
at org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:818)
... 10 common frames omitted

我检查了代码,发现抛出异常是因为from的对象与from的对象field.getDeclaringClass()是不同的实例var1.getClass()恐怕是由于OptaPlanner和Spring Boot之间的java反射冲突的实现所致。

我使用的版本如下:

  • OptaPlanner 7.11.0.Final
  • Spring Boot 2.0.5。发布
  • JVM 1.8.0_181
n1ck

删除spring-boot-devtools依赖项可以修复此错误。与此类似的另一个SO问题解释了它与不同的类加载器有关:Optaplanner的Drools工作内存为空接受的答案还提到了可能的解决方法:

要修复它,请配置spring dev工具以将Reools库以及项目的类一起加载到RestartClassLoader中:using-boot-devtools-customizing-classload

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Spring Boot抱怨OptaPlanner

Spring Boot Optaplanner自动装配问题

如何解决spring boot中出现bean错误

optaplanner-spring-boot-starter vs kie-server-spring-boot-starter

使用spring.io演示项目时Spring Boot中出现错误

在Powermock Spring Boot中出现NoSuchMethodError吗?

spring boot多模块项目中出现“已经定义了具有该名称的bean”错误

从derby迁移到mysql base时,spring-boot应用程序中出现配置错误?

使用 Spring Boot REST API Crud 在 JUnit 中出现空错误

Spring Boot + Bootstrap + jQuery:在Firefox上$ ajax调用中出现错误404

Optaplanner + Spring Boot。是否可以在 ConstraintProvider 实现类中注入 bean?

Spring MVC在Ajax中出现BadRequest错误

Optaplanner Quarkus 反射问题

Optaplanner - spring BeanCreationException

为什么我在 Java Spring 的存储库接口中的 SQL 中出现 SQL 错误:1064

使用 IBM MQ 在 Spring Boot 中出现 TypeMismatchNamingException

Spring Boot中出现500 Internal Server Error(而不是404)

Maven 安装在 Spring 工具套件中出现多个错误

OptaPlanner Drools实施错误

jOOQ和Spring Boot的集成测试中出现“ PSQLException:致命错误:抱歉,已经有太多客户端”错误

将spring-boot-starter-parent从2.1.1升级到2.3.3后,SQL语句中出现语法错误

Eclipse Spring Boot Starter项目出现错误

提交表单时出现Spring Boot错误

运行 spring boot 项目时出现错误

OptaPlanner的Drools规则不会在类路径上与Spring Boot的devtools一起触发,因此得分为零

在对Spring控制器的Ajax调用中出现400错误的请求错误

在 Spring MVC 中出现错误 Missing artifact spring-web:org.springframework

为什么在运行optaplanner .jar时出现此错误?

Spring Boot 2.6.4 -> 2.6.6:记录模拟异常时 Logback 中出现奇怪的 NullPointerException