Совместное использование источника данных между весенним загрузочным приложением и внешним веб-приложением - PullRequest
0 голосов
/ 10 апреля 2019

Мы пытаемся в нашей организации перейти от развертывания на основе Weblogic к микросервисам на основе загрузки Spring.В качестве первого шага я пытаюсь создать приложение весенней загрузки, в которое я хочу загрузить веб-приложение (.war), работающее в weblogic, как приложение для встроенного tomcat.Я хочу, чтобы конфигурация была такой, чтобы приложение весенней загрузки и веб-приложение, работающие на том же tomcat, могли совместно использовать источник данных через JNDI.


 @Bean
    public ServletWebServerFactory servletContainer() {
       return new TomcatServletWebServerFactory() {
           @Override
           protected TomcatWebServer getTomcatWebServer(Tomcat tomcat) {
               new File(tomcat.getServer().getCatalinaBase(), "webapps").mkdirs();
               TomcatWebServer tomcatWebServer;
               try {

                   tomcat.enableNaming();
                   Context context = tomcat.addWebapp("<context>", "<path to webapp>");
                   context.setParentClassLoader(getClass().getClassLoader());
                   WebappLoader loader =new WebappLoader(Thread.currentThread().getContextClassLoader());
                   context.setLoader(loader);


                  tomcatWebServer = super.getTomcatWebServer(tomcat);
                   Container[] children = tomcatWebServer.getTomcat().getHost().findChildren();
                   for (Container child : children) {
                       if (child instanceof Context) {
                           ClassLoader contextClassLoader =
                                   ((Context)child).getLoader().getClassLoader();
                           Thread.currentThread().setContextClassLoader(contextClassLoader);
                           break;
                       }
                   }

               } catch (Exception ex) {
                   throw new IllegalStateException("Failed to add webapp", ex);
               }

               return tomcatWebServer;
           }

            @Override
            protected void postProcessContext(Context context) {

                ContextResource resource = new ContextResource();
                resource.setAuth("Container");
                resource.setName("*****");
                resource.setType(DataSource.class.getName(`enter code here`));
                resource.setProperty("driverClassName","*****");
                resource.setProperty("url", "*****");
                resource.setScope("Sharable");
                resource.setProperty("password", "****");
                resource.setProperty("username", "*****");
                resource.setProperty("global", "****");

                ContextResourceLink contextResourceLink = new ContextResourceLink();
                contextResourceLink.setName("****");
                contextResourceLink.setGlobal("*****");
                contextResourceLink.setType(DataSource.class.getName());


                context.getNamingResources().addResource(resource);
                context.getNamingResources().addResourceLink(contextResourceLink);


            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...