Classical model for database connection provider
Like in Spring where you have not defined lazy loading of bean, the singleton beans are created when the context is started up.

3.3.4. Lazily-instantiated beans


  By default, ApplicationContext implementations eagerly create and
  configure all singleton beans as part of the initialization process.
  Generally, this pre-instantiation is desirable, because errors in the
  configuration or surrounding environment are discovered immediately,
  as opposed to hours or even days later.


So assuming you have some entrypoint like main() method - there is the best place where you can create singletons etc. main() is basically the beginning of your application and since this method is called you should be able to use DatabaseService.

In my opinion DatabaseService is something like DataSource in spring so it should not be configured as lazy loading. 

I would change getInstane to singleton pattern:

public static DatabaseService getInstance() {
    if(instance == null) {
        instance = new DatabaseService();
    }
    return instance;
}


So I will go for:

public static void main(String... args){
    DatabaseService.getInstance() != null ? LOG.info("DatabaseService initialized!") : throw new SystemException("Failed DatabaseService initilization");
    ...
}


or you can use your init method but it would be better to change void to DatabaseService and check whether instance was created successfully.