'Spring.datasource.initialize=false not working

I am working on spring boot and batch application. Due to batch, the application tries to connect to datasource with spring-boot:run. I want to stop that and tried spring.datasource.initialize=false

Along with this also put spring.batch.job.enabled=false

While the second one works fine, it seems the first one is ignored.

Could someone let me know if there is a way to stop db connection on startup? Thanks in advance



Solution 1:[1]

The problem is, that spring/spring-boot loads the whole spring-context when it is "booted". This means, that all defined spring-beans are loaded into the spring-context during this boot-phase. In the case of spring-batch, this also means that the datasource bean is loaded and, if not turned off by "spring.batch.initializer.enabled=false", the spring-batch tables are initialized.

Generally, you cannot prevent this from happening as soon as you have added your spring-batch-starter to your maven dependencies.

Moreover, I don't understand why you want to prevent this from happening. It is just initialisation taking place and, provided that everything is configured correctly, this shouldn't be a problem at all.

Nonetheless, if you really want to stop the datasource from beeing initialized, you could try the following approach. However, I don't know if this will work.

Spring-Batch needs a datasource that is registered under the name "dataSource" in the spring-context. If no spring-bean with that name is found, it creates its own. But if you provide your own implementation/configuration for it, it will use your spring bean.

What you need to do is, to provide a proxy for a datasource that is loaded lazily and then register it under the name "dataSource" in the context:

@Configuration
public class MySetUp {

    @Bean
    public DataSource dataSource() {
        // ... create your "lazy initializing" datasource 
    }
}

But - and let me stress that - this nothing that I would recommend and I don't see a good reason, why this should be necessary to do.

Furthermore, you mention that you only want load "initial static index page" (I assume, you are talking about html, right?). However, I don't see a "batch" use case, which should display html-pages. It would probably be better to have two different applications in this case.

Probably you could provide some more information about your use case.

Solution 2:[2]

As I understand, you don't want to prevent database connection during application startup.

Instead, you want to prevent execution of batch scripts.

Correct me, please, if I got it wrong.

To prevent execution of batch scripts set:

spring.batch.initializer.enabled=false

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Hansjoerg Wingeier
Solution 2 Nicomedes E.