Я пытаюсь сгенерировать несколько репозиториев во время выполнения для данных весны jpa с OpenHFT , чтобы уменьшить шаблон кода. Проблема в том, что при работе с 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();
}
});
}