【发布时间】:2017-09-21 08:01:41
【问题描述】:
我在 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 不作为数据源目标的一部分?
附: (多数据源是围绕一组数据源的抽象,提供数据源之间的负载平衡和故障转移。)
【问题讨论】:
标签: spring weblogic datasource jndi