我正在编写一个Spring Boot(批处理)应用程序,它应该用一个特定的退出代码退出。一个要求是在数据库无法连接时返回退出代码。
我的方法是通过显式创建DataSource
bean、调用getConnection()
并捕获和抛出实现ExitCodeGenerator
的自定义异常来尽早处理此异常。配置如下:
@Configuration
@EnableBatchProcessing
public class BatchConfiguration {
...
@Bean
@Primary
@ConfigurationProperties("spring.datasource")
public DataSourceProperties dataSourceProps() {
return new DataSourceProperties();
}
@Bean
@ConfigurationProperties("spring.datasource")
public DataSource customDataSource(DataSourceProperties props) {
DataSource ds = props.initializeDataSourceBuilder().create().build();
try {
ds.getConnection();
} catch (SQLException e) {
throw new DBConnectionException(e); // implements ExitCodeGenerator interface
}
return ds;
}
...
}
我希望尽可能多地重用Spring Boot自动配置,这就是为什么我使用@configurationproperties
。我不知道这是不是应该走的路。
对DatasourceProperties.getURL()
的调用返回配置的url(从我的属性文件中):
spring.datasource.url=jdbc:oracle:....
但为什么Spring Boot在调用DataSource.getConnection()
时会引发此异常:
java.sql.SQLException: The url cannot be null
at java.sql.DriverManager.getConnection(DriverManager.java:649) ~[?:1.8.0_141]
at java.sql.DriverManager.getConnection(DriverManager.java:208) ~[?:1.8.0_141]
at org.apache.tomcat.jdbc.pool.PooledConnection.connectUsingDriver(PooledConnection.java:308) ~[tomcat-jdbc-8.5.15.jar:?]
at org.apache.tomcat.jdbc.pool.PooledConnection.connect(PooledConnection.java:203) ~[tomcat-jdbc-8.5.15.jar:?]
at org.apache.tomcat.jdbc.pool.ConnectionPool.createConnection(ConnectionPool.java:735) ~[tomcat-jdbc-8.5.15.jar:?]
at org.apache.tomcat.jdbc.pool.ConnectionPool.borrowConnection(ConnectionPool.java:667) ~[tomcat-jdbc-8.5.15.jar:?]
at org.apache.tomcat.jdbc.pool.ConnectionPool.init(ConnectionPool.java:482) [tomcat-jdbc-8.5.15.jar:?]
at org.apache.tomcat.jdbc.pool.ConnectionPool.<init>(ConnectionPool.java:154) [tomcat-jdbc-8.5.15.jar:?]
at org.apache.tomcat.jdbc.pool.DataSourceProxy.pCreatePool(DataSourceProxy.java:118) [tomcat-jdbc-8.5.15.jar:?]
at org.apache.tomcat.jdbc.pool.DataSourceProxy.createPool(DataSourceProxy.java:107) [tomcat-jdbc-8.5.15.jar:?]
at org.apache.tomcat.jdbc.pool.DataSourceProxy.getConnection(DataSourceProxy.java:131) [tomcat-jdbc-8.5.15.jar:?]
at com.foo.bar.BatchConfiguration.customDataSource(BatchConfiguration.java:xxx) [main/:?]
...
或者你知道一些更干净的方法来处理这种情况吗?
错误是细微的,就在线路上
DataSource ds = props.initializeDataSourceBuilder().create().build();
create()
创建新的DatasourceBuilder
并擦除预配置的属性。
Props.InitializeDatasourceBuilder()
已返回一个DatasourceBuilder
并设置了所有属性(url、用户名等)。因此您只需添加新属性或直接build()
它。因此解决方案是删除create()
:
DataSource ds = props.initializeDataSourceBuilder().build();
我试图在代码中调用ajax查询,但它不起作用。我有公共页眉和页脚(php)为所有其他文件。它返回所需的数据,但显示在html代码中。我到处找了找,但都找不到。我真的很抱歉没有在这里发布代码,因为我尝试了一个小时发布代码,但我不能,因为这个编辑器给出了一个关于未格式化代码的错误。 代码的Html部分 JQuery部分 服务器端代码 我可以在控制台中看到成功返回的数据。它也是龚的内部条件,但不显示在选
我正在尝试为Xamarin.Forms创建一个自定义的ButtonRenderer。下面是一个简单的测试,我一直在尝试根据一些教程组合起来,但我似乎可以使它工作。
我已经为我的自定义日志拦截器执行了以下操作 我正在将拦截器设置为restTemboard 记录器正在将响应正确地打印到控制台,但最后响应会以空的形式返回给调用者。我无法调试和解决它。 我已经弄明白了StreamUtils。copyToString(response.getBody(),字符集。defaultCharset())正在读取一次输入流,并且不再在其中保存响应正文(现在为空) 还有谁也面临
问题内容: 如果将它们放在document.ready()函数中,则函数的定义为未定义: 为什么会这样?我确定我只需要一些简单的理解即可:) 问题答案: 不确定为什么在范围内定义函数对您很重要,但是您可以通过预先声明使其起作用: 显然,由于代码尚未运行,您之后不能立即从内联脚本中调用,但是您可以稍后再调用该函数。 只要确保在代码运行之前没有任何东西可以尝试调用(或进行无害函数的初始声明)。
问题内容: 直接的答案是因为s接口被指定为不会引发异常。但是为什么呢? 或换句话说:我必须依赖可以引发异常的函数。从理论上讲,这不应该发生。但是,如果发生这种情况,我希望它脱离我正在使用的整个函数(在中)。即我希望它的行为就像发生未处理的异常一样。 似乎这不可能以一种显而易见的自然方式进行(因为如果接口说它不能抛出异常,就不会)。 我该如何解决?用丑陋的try / catch并打印出异常,并希望我
我已经使用malloc为我的堆栈分配器预分配了一大块内存,但是我希望它能够扩展它的内存。alloc函数如下所示: ... 这种方法很好(也适用于对齐[即使它不在示例中])。但是,当堆栈尝试通过此函数重新定位其缓冲区时,会出现问题: 在这个问题中,用法是这样的: 如您所见,它为第一个整数分配了一个空间,然后当它尝试分配第二个整数时,它需要重新分配(因为我们只为6个字节初始化了分配器)。更改后,第一个