Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringBatch数据源配置-异常处理_Java_Exception_Configuration_Spring Batch_Datasource - Fatal编程技术网

Java SpringBatch数据源配置-异常处理

Java SpringBatch数据源配置-异常处理,java,exception,configuration,spring-batch,datasource,Java,Exception,Configuration,Spring Batch,Datasource,我有一个SpringBatch项目,我想捕获当应用程序找不到数据源时抛出的异常。我已经传递了这个,所以它将使用“内存中的DAO对象”而不是表。。但当找不到数据源时,它仍然抛出异常 我想捕获该异常并抛出自己的错误代码,但我不知道try/catch块必须放在哪里 下面是一段错误日志: 2016-11-24 09:25:36.171 INFO 36770 --- [main] c.d.d.e.config.ReaderConfiguration : Configuring FlatFileItemR

我有一个SpringBatch项目,我想捕获当应用程序找不到数据源时抛出的异常。我已经传递了这个,所以它将使用“内存中的DAO对象”而不是表。。但当找不到数据源时,它仍然抛出异常
我想捕获该异常并抛出自己的错误代码,但我不知道try/catch块必须放在哪里

下面是一段错误日志:

2016-11-24 09:25:36.171  INFO 36770 --- [main] c.d.d.e.config.ReaderConfiguration : Configuring FlatFileItemReader for [MAP]
2016-11-24 09:25:51.664 ERROR 36770 --- [main] o.a.tomcat.jdbc.pool.ConnectionPool : Unable to create initial connections of pool.

com.microsoft.sqlserver.jdbc.SQLServerException: The TCP/IP connection to the host [***], port 1433 has failed. Error: "null. Verify the connection properties. Make sure that an instance of SQL Server is running on the host and accepting TCP/IP connections at the port. Make sure that TCP connections to the port are not blocked by a firewall.".
    at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDriverError(SQLServerException.java:190) ~[sqljdbc4.jar:na]
这将被覆盖以绕过表创建。另外,我使用了两个数据源,这个类无论如何都需要在这里

@Component
public class MyBatchConfigurer extends DefaultBatchConfigurer {
    //Spring batch needs this in order to allow to use more than one datasource

    @Override
    public JobRepository createJobRepository() throws Exception {
        return new MapJobRepositoryFactoryBean().getObject();
    }
}
需要注意的是,我甚至尝试将try/catch放在“main”方法上。。它仍然抛出上面的异常。。然后到达catch中的断点。 此外,我还尝试手动创建数据源。。但是没有用。而且,ApplicationEvent似乎也不起作用

这是一个可以找到数据源的日志:

2016-10-25 16:05:13 [main] INFO  c.d.d.e.config.CompanyConfiguration - Configure FlatFileItemReader for [IW]
2016-10-25 16:05:13 [main] INFO  o.s.jdbc.datasource.init.ScriptUtils - Executing SQL script from class path resource [org/springframework/batch/core/schema-sqlserver.sql]
2016-10-25 16:05:13 [main] INFO  o.s.jdbc.datasource.init.ScriptUtils - Executed SQL script from class path resource [org/springframework/batch/core/schema-sqlserver.sql] in 49 ms.
2016-10-25 16:05:13 [main] INFO  o.s.b.f.config.PropertiesFactoryBean - Loading properties file from URL [jar:file:/home/etl/d-d/d-e-1.0.4-SNAPSHOT.jar!/lib/spring-integration-core-4.2.5.RELEASE.jar!/META-INF/spring.integration.default.properties]

知道你为什么要这样做会很有趣。几点意见:一,。使用MapJobRepository并非用于生产。2.很难捕捉到这个异常,因为这个异常是在整个springcontext列表启动/初始化时抛出的,这是在使用SpringBoot时自动发生的。我想,这是在发送任何应用程序事件之前。我已经就如何使用多个数据源发表了一些看法:这可能会很有帮助。事实上,它不是用于生产的,也不会一直这样。但我想捕获这个异常的原因是我需要抛出自己的自定义错误代码,并伴随一个Nagios警报(加上Opsview,对于使用该应用程序的非技术人员来说,查看错误比查看输出日志非常有帮助)…因此需要执行所有这些操作。您使用的是spring boot,对吗?如果是,我对这个问题的回答可能会有所帮助:org.apache.tomcat.jdbc.pool.ConnectionPool中的init()方法在第468行记录一个SQLException。所以,我决定这样做:@Configuration public class DataSourceConfiguration{//Local-test@ConfigurationProperties(prefix=“test.datasource”)public datasource getTestDataSource()抛出异常{datasource datasource datasource=DataSourceBuilder.create().build();datasource.getConnection();返回数据源;}…我只是通过手动分配数据源来捕获抛出的异常。这不是最好的方法。但是,这是一个折衷的方法。了解您为什么要这样做会很有趣。一些备注:1.使用MapJobRepository不是为了生产。2.捕获此异常会很困难,因为此异常是在整个springcontext列表已启动/初始化,这是在使用SpringBoot时自动发生的事情。我想,这是在发送任何ApplicationEvents之前。我已经就如何使用多个数据源发表了一些意见:这可能会有所帮助。事实上,它不适用于生产,也不会保持这种状态。但我希望要捕获此异常,我需要抛出我自己的自定义错误代码,并伴随一个Nagios警报(与Opsview一起使用,对于使用应用程序的非技术人员来说,这比查看输出日志更有帮助)…因此需要这样做。您使用的是spring boot,对吗?如果是,我对这个问题的回答可能会有所帮助:org.apache.tomcat.jdbc.pool.ConnectionPool中的init()方法在第468行记录一个SQLException。因此,我决定这样做:@Configuration public class DataSourceConfiguration{//Local test@ConfigurationProperties(prefix=“test.datasource”)公共数据源getTestDataSource()引发异常{datasource datasource=DataSourceBuilder.create().build();datasource.getConnection();return datasource;}…我只是通过手动分配数据源来捕获抛出的异常。这不是最好的方法。但是,这是一个折衷方案。