我正在进行弹簧启动和批量应用。
由于批处理,应用程序尝试连接到数据源
与spring-boot:run
。
我想停止并尝试spring.datasource.initialize=false
除此之外还放spring.batch.job.enabled=false
虽然第二个工作正常,但似乎第一个被忽略。
有人可以告诉我是否有办法在启动时停止数据库连接? 提前致谢
答案 0 :(得分:0)
据我了解,您不希望在应用程序启动期间阻止数据库连接。
相反,您希望阻止执行批处理脚本。
如果我弄错了,请纠正我。
为防止执行批处理脚本集:
spring.batch.initializer.enabled=false
答案 1 :(得分:0)
问题是,spring / spring-boot在“引导”时加载整个spring-context。这意味着,在此引导阶段,所有已定义的spring-bean都会加载到spring-context中。对于spring-batch,这也意味着加载了数据源bean,如果没有被“spring.batch.initializer.enabled = false”关闭,则初始化spring-batch表。
通常,只要将spring-batch-starter添加到maven依赖项中,就无法阻止这种情况发生。
此外,我不明白你为什么要阻止这种情况发生。这只是初始化,如果一切都配置正确,这应该不是问题。
尽管如此,如果你真的想要停止数据源的初始化,你可以尝试以下方法。但是,我不知道这是否有效。
Spring-Batch需要一个在spring-context中以“dataSource”名称注册的数据源。如果找不到具有该名称的spring-bean,它将创建自己的。但是如果你为它提供自己的实现/配置,它将使用你的spring bean。
您需要做的是,为懒惰加载的数据源提供代理,然后在上下文中以“dataSource”名称注册它:
@Configuration
public class MySetUp {
@Bean
public DataSource dataSource() {
// ... create your "lazy initializing" datasource
}
}
但是 - 让我强调一下 - 这没什么我推荐的,我没有看到一个很好的理由,为什么这应该是必要的。
此外,你提到你只想加载“初始静态索引页面”(我假设你在谈论html,对吧?)。但是,我没有看到“批处理”用例,它应该显示html页面。在这种情况下,拥有两个不同的应用程序可能会更好。
可能您可以提供有关您的用例的更多信息。