Hi Imad,
This is due to the /tokens endpoint calling the validateTokens method, which searches the tokensRepository for the requested appToken and checks if it matches the value of the symphonyToken.
https://github.com/finos/symphony-bdk-java/blob/main/symphony-bdk-core/src/main/java/com/symphony/bdk/core/auth/impl/AbstractExtensionAppAuthenticator.java#L48-L49
The default implementation of the tokensRepository uses an InMemoryTokensRepository, so by running multiple instances round robin, one instance would store the token in that in-memory repository and another instance would not be able to fetch it.
https://github.com/finos/symphony-bdk-java/blob/main/symphony-bdk-spring/symphony-bdk-core-spring-boot-starter/src/main/java/com/symphony/bdk/spring/config/BdkCoreConfig.java#L95-L99
That default implementation is exposed as a bean but with @ConditionalOnMissingBean, so all you need to do is provide your own ExtensionAppTokensRepository bean that reads and writes to a shared location between your instances - could be something permanent like your postgres or even a redis cache.
https://github.com/finos/symphony-bdk-java/blob/main/symphony-bdk-core/src/main/java/com/symphony/bdk/core/auth/ExtensionAppTokensRepository.java