1

我正在尝试使用OpenHFT在运行时为 spring data jpa 生成一些存储库,以减少样板代码。问题是,当使用 IDEA 运行时它运行良好,但是如果我在外部 tomcat 或简单地在命令行中运行它:“mvn spring-boot:run”,它无法识别外部资源,例如@Resository和一些书面类。

我已经努力找到问题但没有用,但是我为这个问题创建了最小的演示:github。我还尝试使用不同的类加载器作为 OpenHFT 编译器的参数,例如 .class、Repository.class 和 Thread.currentThread().getContextClassLoader()。但仍然以错误告终。

@EventListener
private void initRepositoryMapping(ApplicationReadyEvent event) {
    unMappedWithRepoEntity.add(Department.class);
    unMappedWithRepoEntity.forEach((clazz) -> {
        String className = "com.example.repository.DepartmentRepository";
        String javaCode =
                "\npackage com.example.repository;" +
                "\nimport com.example.entity.Department;" +
                "\nimport org.springframework.stereotype.Repository;" +
                "\nimport java.util.UUID;" +
                "\nimport com.example.repository.BaseRepository;" +
                "\n@Repository" +
                "\npublic interface DepartmentRepository extends BaseRepository<Department, UUID> {}" ;
        logger.info("generating java class : {} code:{}", className, javaCode);
        try {
            ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
            logger.info("using classloader: {}", classLoader);
            CompilerUtils.CACHED_COMPILER.loadFromJava(classLoader, className, javaCode);
            System.out.println(Class.forName("com.example.repository.DepartmentRepository"));
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    });
}
4

0 回答 0