2017-04-18 9 views
0

Ich verwende eine Datenquelle, die in tomcat in meiner Frühlingskonfiguration definiert ist, wie in der folgenden XML gezeigt.Spring Bean optionale Eigenschaft

Es kann vorkommen, dass diese Datenquelle möglicherweise nicht in der context.xml von tomcat definiert ist. In solchen Fällen schlägt die Kontextinitialisierung fehl, da myDS nicht gefunden wird.

Ist es möglich, die Datenquelle als optional zu konfigurieren, damit die Anwendungsinitialisierung nicht beeinträchtigt wird? Es kann einen Laufzeitfehler, wenn diese Datenquelle zugegriffen wird, die

akzeptabel ist
<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> 

Dank Muhad

Antwort

0

Sie können die DelegatingDataSource überprüfen, können Sie die Logik kapseln die Datenquelle von JNDI innerhalb laden seine Instantiierung. Für Ihre Anwendung wird immer eine DataSource da sein, aber in einigen Fällen (wenn es nicht in der Lage ist, DataSource von JNDI zu laden), gibt es keine Delegierung.

+0

Gibt es irgendeine Konfiguration, die ich in der XML machen kann? Ich möchte dafür keinen Delegathandler schreiben. SpringObjectFactory unterstützt ein Standardobjekt für den Fall, dass JNDI fehlschlägt. Ich werde das versuchen . – lives