Java 如何在WebLogic应用程序初始化期间获取数据源

Java 如何在WebLogic应用程序初始化期间获取数据源,java,spring,oracle,weblogic,javabeans,Java,Spring,Oracle,Weblogic,Javabeans,我将WebLogic与Spring一起使用,与Oracle DB对话。我已经设置了一个实现ServletContextListener的Servlet,并配置了web.xml以将该类添加为侦听器。在对contextInitialized(ServletContextEvent sce)的调用中,我试图获取我在application.xml的bean中配置的数据源对象,以便在应用程序启动时对DB执行一些操作 public void contextInitialized(ServletConte

我将WebLogic与Spring一起使用,与Oracle DB对话。我已经设置了一个实现ServletContextListener的Servlet,并配置了web.xml以将该类添加为侦听器。在对contextInitialized(ServletContextEvent sce)的调用中,我试图获取我在application.xml的bean中配置的数据源对象,以便在应用程序启动时对DB执行一些操作

  public void contextInitialized(ServletContextEvent sce) {
    try {
      InitialContext enc = new InitialContext();
      Context compContext = (Context) enc.lookup("java:comp/env");
      dataSource = (DataSource) compContext.lookup("dataSource");
      ...
这会在查找时引发NameNotFoundException。我该怎么得到这个? 我的豆子看起来像这样:

<bean id="dataSource" class="oracle.ucp.jdbc.PoolDataSourceFactory"
      factory-method="getPoolDataSource">
    <property name="URL" value="jdbc:oracle:thin:@localhost:1521:XE"/>
    <property name="connectionFactoryClassName" value="oracle.jdbc.pool.OracleDataSource"/>
    <property name="connectionPoolName" value="COS_POOL"/>
    ...
</bean>

...

您可以在一个Spring托管bean中使用注释来执行应用程序启动期间所需的操作。或者,您可以实现
初始化bean
并实现
afterPropertiesSet
方法。

您不需要。为什么你需要一个servlet监听器来做这个…我只是想找到一种方法,在应用程序启动时做一些DB的事情。也许使用servlet是错误的方法。如果是这样,正确的方法是什么?使用spring
ApplicationListener
。这取决于您想做什么,因为无法保证代理已经创建,并且在需要事务或其他资源管理时可能还无法工作。更好的方法是使用
ApplicationListener
并侦听
ContextRefreshedEvent
s。