Настройка URL с использованием JNDI в SpringBootEmbeddedTomcatServer - PullRequest
0 голосов
/ 13 мая 2019

Я пытаюсь настроить URL-адрес службы конечной точки (которую я буду вызывать из моих остальных служб, написанных при весенней загрузке), используя JNDI на встроенном сервере Tomcat. Однако я не в состоянии сделать это, поскольку это бросает исключение класса. Невозможно привести от Прокси к URL

Исключение:

Caused by: java.lang.ClassCastException: com.sun.proxy.$Proxy51 cannot be cast to java.net.URL
    at io.javabrains.boot.ApplicationStarter.jndiDataSource(ApplicationStarter.java:85) [classes/:na]
    at io.javabrains.boot.ApplicationStarter$$EnhancerBySpringCGLIB$$59e10b3.CGLIB$jndiDataSource$0(<generated>) ~[classes/:na]
    at io.javabrains.boot.ApplicationStarter$$EnhancerBySpringCGLIB$$59e10b3$$FastClassBySpringCGLIB$$90c9344c.invoke(<generated>) ~[classes/:na]
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:244) ~[spring-core-5.1.4.RELEASE.jar:5.1.4.RELEASE]
@Bean
public TomcatServletWebServerFactory servletContainerV2() {return new TomcatServletWebServerFactory() {
    @Override
    protected TomcatWebServer 
    getTomcatWebServer(org.apache.catalina.startup.Tomcat tomcat) {
      tomcat.enableNaming();
      return super.getTomcatWebServer(tomcat);
}

 @Override
 protected void postProcessContext(Context context) {
    ContextResource resource = new ContextResource();
    resource.setName("jdbc/myJndiResource");
    resource.setType(URL.class.getName());
    URL url = "www.google.com"
    resource.setProperty("url",url)
    context.getNamingResources().addResource(resource);
}

=============================================== ===========

Получение contextResource с использованием JNDIObjectFactoryBean

@Bean
public URL jndiDataSource() throws IllegalArgumentException, NamingException {
    JndiObjectFactoryBean bean = new JndiObjectFactoryBean(); 
    bean.setJndiName("java:/comp/env/jdbc/myJndiResource"); 
    bean.setExpectedType(URL.class);
    bean.setLookupOnStartup(false);
    bean.afterPropertiesSet();
    URL url = (URL)bean.getObject();
    }

Я смогу получить URL-адрес из jndiDataSource, который я могу внедрить в мои служебные бины во время выполнения в зависимости от среды, такой как dev, staging и т. Д.

...