我在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。 (多数据源是围绕一组数据源的抽象,它们提供数据源之间的负载平衡和故障转移。)
答案 0 :(得分:0)
所以,当你说两个AdminServers 时,我假设,你的意思是两个域。因为,AFAIK,AdminServer代表WLS中的域。
如果我从数据源中删除AdminServer,我的应用程序将失败 查找数据源。
是的,那会失败。由于您的应用程序将部署在同一个域服务器上,因此它将查找数据源。
我仍然不明白为什么需要将AdminServer选为一个 目标。什么可以这样做AdminServer将不会作为一部分 数据源目标?
因此,当您为任何数据源定义Target时,意味着您要在该域服务器上部署数据源,并且只能部署在同一域服务器下的所有应用程序。