Weblogic AdminServer DataSource连接已重载

时间:2017-09-21 08:01:41

标签: spring weblogic datasource jndi

我在WebLogic中部署并运行了一个Spring Web应用程序。它需要通过JNDI DataSource连接到数据库。

在关注post之后,我的应用程序能够找到jndi数据源。我测试了一个数据源,它工作正常。但是,当数据源是多数据源时,一旦我的应用程序启动,两个AdminServer立即处于过载状态。

知道是什么导致AdminServer上的重载状态?我使用的weblogic版本是12.2.1.2.0。

如果我从数据源中删除AdminServer,我的应用程序将无法查找数据源。

以下是我查找JNDI数据源的代码。

@Bean
public DataSource dataSource()  {
  String jndiDs = 
  dbProperties.getProperty(DB_DATASOURCE_JNDI_NAME_OPTION);
  LOGGER.info("Lookup jndi datasource {}", jndiDs);

  JndiDataSourceLookup dsLookup = new JndiDataSourceLookup();
  try {
    Properties jndiEnvironment = new Properties();
    jndiEnvironment.setProperty("lookupOnStartup", "false");
    jndiEnvironment.setProperty("proxyInterface", "javax.sql.DataSource");
    dsLookup.setJndiEnvironment(jndiEnvironment);

    JndiTemplate jndiTemplate = new JndiTemplate();
    Properties environment = new Properties();
    String namingProviderUrl = dbProperties.getProperty(DB_DATASOURCE_JNDI_NAMING_PROVIDER_URL, "t3://localhost:8301");
    environment.setProperty("java.naming.provider.url", namingProviderUrl);
    environment.setProperty("java.naming.factory.initial", "weblogic.jndi.WLInitialContextFactory");
    jndiTemplate.setEnvironment(environment);
    dsLookup.setJndiTemplate(jndiTemplate);

    DataSource ds = dsLookup.getDataSource(jndiDs);
    LOGGER.info("Use jndi datasource {}", jndiDs);
    return ds;
  } catch (Exception e) {
    LOGGER.error("Failed to load jndi datasource {}", jndiDs, e);
    throw e;
  }
}

我仍然不明白为什么需要选择AdminServer作为其中一个目标。可以做什么AdminServer不会作为数据源目标的一部分?

P.S。 (多数据源是围绕一组数据源的抽象,它们提供数据源之间的负载平衡和故障转移。)

1 个答案:

答案 0 :(得分:0)

所以,当你说两个AdminServers 时,我假设,你的意思是两个域。因为,AFAIK,AdminServer代表WLS中的域。

  

如果我从数据源中删除AdminServer,我的应用程序将失败   查找数据源。

是的,那会失败。由于您的应用程序将部署在同一个域服务器上,因此它将查找数据源。

  

我仍然不明白为什么需要将AdminServer选为一个   目标。什么可以这样做AdminServer将不会作为一部分   数据源目标?

因此,当您为任何数据源定义Target时,意味着您要在该域服务器上部署数据源,并且只能部署在同一域服务器下的所有应用程序。

相关问题