CamelContext: не удалось создать маршрут, содержащий кварц, когда база данных недоступна

#apache-camel #quartz-scheduler #apache-karaf #postgresql-9.4

#apache-camel #quartz-планировщик #apache-karaf #postgresql-9.4

Вопрос:

Мой пакет установлен в контейнер karaf 4.0.7, который использует camel-quartz22.17.3 В CamelContext У меня есть много маршрутов, таких как «MyRoute», он вызывает задание quatrz (с использованием camel-quartz2), настроенное в базе данных postgresql:

 <camelContext id="myCamelContext" xmlns="http://camel.apache.org/schema/blueprint">

        <route id="myRoute">
            <from
                uri="quartz2://statGroup/startupTimer?trigger.repeatInterval=1amp;amp;trigger.repeatCount=0" />
            <bean ref="myProcessor" method="myMethod" />
        </route>

 </camelContext>
 

Моя проблема заключается в том, что когда я пытаюсь запустить контейнер karaf, а postgresql останавливается, у меня возникает проблема с журналом ниже, и CamelContext «myCamelContext» будет отключен.

Можно создать маршрут, который вызывает camel-quartz, но база данных недоступна?

 2016-10-14 17:21:40,201 | ERROR | FelixStartLevel  | BlueprintCamelContext            | 80 - org.apache.camel.camel-blueprint - 2.17.3 | Error occurred during starting Camel: CamelContext(statisticsContext) due Failed to create route myRoute: Route(myRoute)[[From[quartz2://stat... because of Failed to resolve endpoint: quartz2://statGroup/startupTimer?trigger.repeatCount=0amp;trigger.repeatInterval=1 due to: Failed to obtain DB connection from data source 'statQuartzDS': java.sql.SQLException: Could not retrieve datasource via JNDI url 'osgi:service/statQuartzDS' java.sql.SQLException: Unable to acquire a new connection from the pool
org.apache.camel.FailedToCreateRouteException: Failed to create route myRoute: Route(myRoute)[[From[quartz2://stat... because of Failed to resolve endpoint: quartz2://statGroup/startupTimer?trigger.repeatCount=0amp;trigger.repeatInterval=1 due to: Failed to obtain DB connection from data source 'statQuartzDS': java.sql.SQLException: Could not retrieve datasource via JNDI url 'osgi:service/statQuartzDS' java.sql.SQLException: Unable to acquire a new connection from the pool
    at org.apache.camel.model.RouteDefinition.addRoutes(RouteDefinition.java:201)
    at org.apache.camel.impl.DefaultCamelContext.startRoute(DefaultCamelContext.java:974)[83:org.apache.camel.camel-core:2.17.3]
    at org.apache.camel.impl.DefaultCamelContext.startRouteDefinitions(DefaultCamelContext.java:3301)[83:org.apache.camel.camel-core:2.17.3]
    at org.apache.camel.impl.DefaultCamelContext.doStartCamel(DefaultCamelContext.java:3024)[83:org.apache.camel.camel-core:2.17.3]
    at org.apache.camel.impl.DefaultCamelContext.access$000(DefaultCamelContext.java:175)[83:org.apache.camel.camel-core:2.17.3]
    at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:2854)
    at org.apache.camel.impl.DefaultCamelContext$2.call(DefaultCamelContext.java:2850)
    at org.apache.camel.impl.DefaultCamelContext.doWithDefinedClassLoader(DefaultCamelContext.java:2873)[83:org.apache.camel.camel-core:2.17.3]
    at org.apache.camel.impl.DefaultCamelContext.doStart(DefaultCamelContext.java:2850)[83:org.apache.camel.camel-core:2.17.3]
    at org.apache.camel.support.ServiceSupport.start(ServiceSupport.java:61)
    at org.apache.camel.impl.DefaultCamelContext.start(DefaultCamelContext.java:2819)[83:org.apache.camel.camel-core:2.17.3]
    at org.apache.camel.blueprint.BlueprintCamelContext.start(BlueprintCamelContext.java:180)
    at org.apache.camel.blueprint.BlueprintCamelContext.maybeStart(BlueprintCamelContext.java:212)
    at org.apache.camel.blueprint.BlueprintCamelContext.serviceChanged(BlueprintCamelContext.java:150)
    at org.apache.felix.framework.util.EventDispatcher.invokeServiceListenerCallback(EventDispatcher.java:991)[org.apache.felix.framework-5.4.0.jar:]
    at org.apache.felix.framework.util.EventDispatcher.fireEventImmediately(EventDispatcher.java:839)[org.apache.felix.framework-5.4.0.jar:]
    at org.apache.felix.framework.util.EventDispatcher.fireServiceEvent(EventDispatcher.java:546)[org.apache.felix.framework-5.4.0.jar:]
    at org.apache.felix.framework.Felix.fireServiceEvent(Felix.java:4557)[org.apache.felix.framework-5.4.0.jar:]
    at org.apache.felix.framework.Felix.registerService(Felix.java:3549)[org.apache.felix.framework-5.4.0.jar:]
    at org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:348)
    at org.apache.felix.framework.BundleContextImpl.registerService(BundleContextImpl.java:355)
    at org.apache.camel.blueprint.BlueprintCamelContext.init(BlueprintCamelContext.java:100)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.8.0_101]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)[:1.8.0_101]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.8.0_101]
    at java.lang.reflect.Method.invoke(Method.java:498)[:1.8.0_101]
    at org.apache.aries.blueprint.utils.ReflectionUtils.invoke(ReflectionUtils.java:299)[12:org.apache.aries.blueprint.core:1.6.2]
    at org.apache.aries.blueprint.container.BeanRecipe.invoke(BeanRecipe.java:980)[12:org.apache.aries.blueprint.core:1.6.2]
    at org.apache.aries.blueprint.container.BeanRecipe.runBeanProcInit(BeanRecipe.java:736)[12:org.apache.aries.blueprint.core:1.6.2]
    at org.apache.aries.blueprint.container.BeanRecipe.internalCreate2(BeanRecipe.java:848)[12:org.apache.aries.blueprint.core:1.6.2]
    at org.apache.aries.blueprint.container.BeanRecipe.internalCreate(BeanRecipe.java:811)[12:org.apache.aries.blueprint.core:1.6.2]
    at org.apache.aries.blueprint.di.AbstractRecipe$1.call(AbstractRecipe.java:79)[12:org.apache.aries.blueprint.core:1.6.2]
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)[:1.8.0_101]
 

Комментарии:

1. Есть ли у вас какие-либо особые требования для использования quartz в первую очередь? Рассматривали ли вы возможность использования timer component вместо этого? Также не могли бы вы отформатировать свой вопрос, используя три обратных символа, чтобы выделить блок кода?

2. Да, у меня есть особые требования для использования quartz

3. Я имел в виду, какая конкретная функция quartz вам здесь нужна?

4. возможно, здесь не требуется использовать quartz, но у меня есть другие маршруты, требующие quartz. Систематически у меня возникает та же проблема, когда задание вызова quartz хранится в базе данных

5. зачем вам нужен quartz на этих других маршрутах? Я прошу понять, что вы используете из этого. Например. если вас не волнует использование механизмов сохранения, вы можете просто переключиться на RAMJobStore