2017-04-18 68 views
0

我在我的彈簧配置中使用了在tomcat中定義的數據源,如下面的xml所示。spring bean可選屬性

有時候可能會發生這個數據源可能沒有在tomcat的context.xml中定義。 在這種情況下,由於找不到myDS,上下文初始化失敗。

是否可以將數據源配置爲可選的,以便應用程序初始化不受影響? 有可當這個數據源訪問的運行時錯誤,這是可以接受的

<bean id="myDataSource" class="org.springframework.jndi.JndiObjectFactoryBean"> 
     <property name="jndiName" value="java:comp/env/jdbc/myDS"/> 
    </bean> 

<bean id="myEntityManagerFactory" 
     class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> 
     <property name="dataSource" ref="myDataSource" /> 
     <property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml" /> 
     <property name="packagesToScan" value="com..XX.XX" /> 
     <property name="persistenceUnitName" value="myPU" /> 

     <property name="jpaVendorAdapter"> 
      <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> 
       <property name="showSql" value="#{systemProperties['showSql'] == null ? 'true' : systemProperties['showSql'] }" /> 
      </bean> 
     </property> 

     <property name="persistenceUnitPostProcessors"> 
      <list> 
       <ref bean="wrkflw-punitpostprocessor" /> 
      </list> 
     </property> 

     <property name="jpaProperties"> 
      <props> 
       <prop key="hibernate.dialect">#{systemProperties['dbDialect']}</prop> 
      </props> 
     </property> 
    </bean> 

感謝 Muhad

回答

0

您可以檢查DelegatingDataSource,你可以封裝邏輯從JNDI內加載的數據源其實例化。對於您的應用程序,在那裏總是有DataSource,但在某些情況下(無論何時無法從JNDI加載DataSource),都沒有委派。

+0

是否有任何配置,我可以在XML中做?我不想爲此寫一個委託處理程序。如果JNDI失敗,SpringObjectFactory支持一個默認對象。我會嘗試。 – lives

相關問題