类装入器错误 - 未命名的模块的装入器 org.springframework.boot.devtools.restart.classloader.RestartClassLoader

2022-09-03 12:19:08

我对Spring和Java作为一个整体很陌生,我目前正在研究一个API。我有这个代码访问MSSQL数据库,检索结果并应该可视化它,但它不起作用。我的意思是,如果我只调用过程并可视化结果集,它将正常工作。问题是我无法使用“RatingProcedure”对象。当我尝试获取某个对象的值时,它会向我显示以下错误

Hibernate: {call dis_entity.spdcmpracovnici(?,?,?,?)} 2019-09-02 01:56:01.355 WARN 8720 --- [nio-8050-exec-3] .m.m.a.ExceptionHandlerExceptionResolver : Resolved [java.lang.ClassCastException: class [Ljava.lang.Object; can not cast to class com.pproi.dcm.ratingprocedure.RatingProcedure.RatingProcedure.RatingProcedure ([Ljava.lang.Object; is in module java.base of loader 'bootstrap'; >com.pproi.dcm.ratingprocedure.RatingProcedure 位于 loader > 的未命名模块中org.springframework.boot.devtools.restart.classloader.RestartClassLoader @7193df92)]

代码:

@GetMapping("/replacements/{sourceId}/workers")
    public ResponseEntity<List<PossibleReplacementResponseModel>> getReplacements(@PathVariable Integer sourceId,
            @RequestParam(required = false) Integer targetWorkerId,
            @RequestParam(required = false) Integer targetLineId,
            @RequestParam(required = false) String targetWorkplaces) {

        List<PossibleReplacementResponseModel> response = new ArrayList<>();

        // 400 Bad Request
        if ((targetLineId != null && targetWorkerId != null) || (targetWorkplaces != null && targetLineId == null))
            return ResponseEntity.badRequest().build();

        StoredProcedureQuery ratingProcedure = entityManager.createNamedStoredProcedureQuery("dcmrating");

        StoredProcedureQuery storedProcedure = ratingProcedure.setParameter("pk_target_worker", targetWorkerId)
                .setParameter("pk_target_sdl", targetLineId).setParameter("pk_target_workplaces", targetWorkplaces)
                .setParameter("pk_source_sdl", sourceId);

        List<RatingProcedure> ratings = storedProcedure.getResultList();

        for(RatingProcedure rating : ratings) {
            PossibleReplacementResponseModel responseModel = new PossibleReplacementResponseModel();
            Optional<Worker> _worker = workerRepository.findById(rating.getPersonalId());

            if(_worker.isPresent()) {
                Worker worker = _worker.get();
                responseModel.setId(worker.getId());
                responseModel.setName(worker.getFullName());
                responseModel.setSkills(findWorkersSkills(worker));
                responseModel.setPhysicalExamination(findWorkersMedicalExaminationEndDate(worker));
                responseModel.setExams(findWorkersExams(worker));
                responseModel.setRestrictions(findWorkersRestrictions(worker));
                responseModel.setRating(rating.getRating());
            }
            response.add(responseModel);
        }

        return ResponseEntity.ok(response);
    }

我甚至可能对解决方案有一个想法!我可能应该自定义我的重新启动类加载器,如这里所示,但是我的技能在那里结束,我不知道我应该在文件中指定什么。

有什么想法吗?

非常感谢。


答案 1

一个简单的解决方法是通过设置系统属性来禁用重新启动

spring.devtools.restart.enabled = false

例如,当使用spring-boot maven插件时,以这种方式启动应用程序:

mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.devtools.restart.enabled=false"

答案 2
java.lang.ClassCastException: class <Class_Name> cannot be cast to class <Class_Name> (<Class_Name> is in unnamed module of loader org.springframework.boot.devtools.restart.classloader.RestartClassLoader <Class_Name> is in unnamed module of loader 'app')

这与弹簧开发工具包有关。如果不需要,请尝试删除该包。


推荐