Загрузка файла jar во время выполнения из внешней папки при весенней загрузке - PullRequest
0 голосов
/ 01 августа 2020

У меня есть приложение для весенней загрузки. Я хочу загружать внешние jar-файлы из внешней папки во время выполнения в контексте приложения весенней загрузки без перезапуска контекста.

Я проверил приведенный ниже ответ, который использует загрузчик классов для загрузки классов во время выполнения. Решение очень старое.

Как загружать классы во время выполнения из папки или JAR?

Просто хотел узнать, есть ли другой способ загрузки jar-файлов в время выполнения.

Ответы [ 2 ]

0 голосов
/ 24 августа 2020

Возможно, вы захотите отложить загрузку этих компонентов, которые зависят от внешних jar-файлов. Пожалуйста, проверьте, можете ли вы использовать @Lazy. Ссылка ниже может быть полезной https://www.logicbig.com/tutorials/spring-framework/spring-core/lazy-at-injection-point.html

0 голосов
/ 07 августа 2020

Каким-то образом мне удалось загрузить классы @Component в контексте Spring во время выполнения. Может кто-нибудь, пожалуйста, дайте мне знать, есть ли другой более простой способ добиться того же:

@Component
public class CustomClassLoader {

 @Autowired
 ConfigurableApplicationContext applicationContext;

 
  public void loadJar() throws ClassNotFoundException {

    JarClassLoader jcl = new JarClassLoader();

    jcl.add("D:\\new\\test");  //loaded all the jars from test folder

    Map<String, byte[]> loadedResourceMap = jcl.getLoadedResources();

    Set<String> loadedSet= loadedResourceMap.keySet().stream()
        .filter(s -> s.startsWith("com/test/package/ext/")).collect(Collectors.toSet()); 

    for (String localSet : loadedSet) {
      String modifiedString = localSet.replace("/", ".").replace(".class", "");
      logger.info("modified string " + modifiedString);

      final Class<?> loadedClass = jcl.loadClass(modifiedString);

      try {
        Object loadedObject =  applicationContext.getAutowireCapableBeanFactory()
            .createBean(loadedClass); //autowiring the loaded classes
             } catch (Exception e) {
        logger.info("Exception occured while loading " + modifiedString
            + " exception is" + e.getStackTrace());
      }
    }

  }

}
...