2013-04-17 13 views
7

Podczas korzystania Wiosna Batch Administrator, stara się zapewnić pewne domyślne dla źródła danych, transactionManager itpKorzystanie JNDI źródła danych z wiosennej serii Administrator

Jeśli chcesz zmienić te ustawienia domyślne, można tworzyć własne definicje xml fasoli pod META -INF/spring/batch/servlet/override/ folder i podczas bootstrapu gwarantuje, że domyślne właściwości zostaną nadpisane.

W wiosenno-wsadowym-admin, domyślnym źródłem danych jest określony w źródła danych-context.xml z tą definicją

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"> 
    <property name="driverClassName" value="${batch.jdbc.driver}" /> 
    <property name="url" value="${batch.jdbc.url}" /> 
    <property name="username" value="${batch.jdbc.user}" /> 
    <property name="password" value="${batch.jdbc.password}" /> 
    <property name="testWhileIdle" value="${batch.jdbc.testWhileIdle}"/> 
    <property name="validationQuery" value="${batch.jdbc.validationQuery}"/> 
</bean> 

Teraz chcę, aby zastąpić tę z DataSource JNDI źródła danych więc usunąłem linie i usługi, takie jak batch.jdbc.driver, batch.jdbc.url i mają następujące JNDI definicji

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

Jak można łatwo odgadnąć, system najpierw próbuje zainicjować fasoli źródłem danych zdefiniowany w danych-source-context.xml a ponieważ nie można znaleźć żadnych wartości str wartości roperty batch.jdbc. * nie powiedzie się z wyjątkiem.

Nie można rozwiązać zastępczy 'batch.jdbc.driver' wartości string [$ {batch.jdbc.driver}]

Ponieważ będę używał JNDI i nie chcesz, aby radzić sobie z tymi wartości właściwości, nie mogę kontynuować.

Każdy pomysł na zastąpienie źródła danych w tej sytuacji?

+0

Czy znalazłeś rozwiązanie? (Nie chcę używać profili tylko dla tego problemu.) – dsatish

+0

@sdny No. Próbuję również użyć rozwiązania bez profili. –

+0

Przebiegłem ten sam problem. Nawet ustawiając działające "domyślne" połączenie przy użyciu wymaganych właściwości, nie byłem w stanie uzyskać zastąpienia źródła danych, które ma zostać użyte. – Eric

Odpowiedz

6

W Wiosna Batch Administrator istnieją 2 ApplicationContexts sprężynowe, które są obciążone:

  • serwlet-config.xml
  • webapp-config.xml

serwlet-config.xml ma ten import:

<import resource="classpath*:/META-INF/spring/batch/servlet/resources/*.xml" /> 
<import resource="classpath*:/META-INF/spring/batch/servlet/manager/*.xml" /> 
<import resource="classpath*:/META-INF/spring/batch/servlet/override/*.xml" /> 

webapp-config.xml ma następujące import:

<import resource="classpath*:/META-INF/spring/batch/bootstrap/**/*.xml" /> 
<import resource="classpath*:/META-INF/spring/batch/override/**/*.xml" /> 

servlet-config.xml konfiguruje serwlet, webapp-config.xml konfiguruje (część zaplecza) aplikacji. Problem polega na tym, że komponent bean danych jest częścią/zdefiniowany w drugiej konfiguracji, a nie pierwszy. Dlatego po dodaniu komponentu bean źródła danych do zastąpienia dla konfiguracji serwletu (/ META-INF/spring/batch/servlet/override/*. Xml), tak jak to robisz, dodajesz nowy komponent bean do pierwszego kontekstu, zamiast nadpisywać komponent bean źródła danych drugiego kontekstu.

Tak, trzeba umieścić swoje dane niestandardowe-source-context.xml pod META-INF/wiosna/partii/override/zamiast META-INF/wiosna/partii/servlet/override/

Wtedy to działa i nie otrzymasz nawet błędu Could not resolve placeholder 'batch.jdbc.driver' in string value [${batch.jdbc.driver}].

+0

Czy możesz opublikować zawartość pliku kontekstowego dodano do META-INF/spring/batch/override? – emeraldjava

+0

skopiowane env-context.xml do /batch/override/manager/env-context.xml i zmienił ścieżce klasy: partię - $ {ŚRODOWISKO: HSQL} .Properties do classpath: batch-mysql.properties ale jest nie działa – vishal

+0

Czy możesz potwierdzić, czy dodałeś to do głównego folderu webapps swojego projektu maven? Musiałem przenieść kontekst do głównego folderu, jak w tym wątku. http://forum.spring.io/forum/spring-projects/batch/84070-spring-batch-admin-db-connection-by-datasource – emeraldjava

3

od wiosny 3.1 jest funkcja „profile”, który pozwala ustawić źródło danych „źródło” w oparciu o środowisko w którym jesteś. (Wbudowany jeden do testowania lokalne, JNDI jeden do wdrożenia.)

to wyglądałoby jak poniżej;

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:jee="http://www.springframework.org/schema/jee" 
    xmlns:jdbc="http://www.springframework.org/schema/jdbc" 
    xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd 
     http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 

    <!-- "production" datasource --> 
    <jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/dbconn"/> 

    <!-- profile for "local" testing --> 
    <beans profile="local"> 
      <!-- datasource that only gets created in that active profile --> 
     <jdbc:embedded-database id="dataSource" type="H2"/> 
    </beans> 


</beans> 

w tym przykładzie, gdy „aktywny profil” jest ustawiony na „lokalne”, to nadpisuje JNDI źródła danych-odnośnika.

Powiązane problemy