ServerDataSourceConfig.java

package io.featureprobe.api.config;

import io.featureprobe.api.base.cache.MemoryCache;
import io.featureprobe.api.base.component.SpringBeanManager;
import io.featureprobe.api.dao.repository.PublishMessageRepository;
import io.featureprobe.api.server.CacheServerDataSource;
import io.featureprobe.api.server.DBServerDataSource;
import io.featureprobe.api.server.ServerDataSource;
import io.featureprobe.api.service.BaseServerService;
import lombok.AllArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@AllArgsConstructor
public class ServerDataSourceConfig {

    private static final String SERVER_DATA_SOURCE_DB = "DB";

    private static final String SERVER_DATA_SOURCE_CACHE = "MEMORY";

    AppConfig appConfig;

    PublishMessageRepository publishMessageRepository;

    BaseServerService baseServerService;

    ApplicationEventPublisher eventPublisher;

    SpringBeanManager springBeanManager;

    @Bean
    public ServerDataSource serverDataSource() {
        String serverDataSource = appConfig.getServerDataSource();
        if (StringUtils.isNotBlank(serverDataSource) && StringUtils.equalsIgnoreCase(serverDataSource,
                SERVER_DATA_SOURCE_DB)) {
            return new DBServerDataSource(baseServerService);
        } else if (StringUtils.isNotBlank(serverDataSource) && StringUtils.equalsIgnoreCase(serverDataSource,
                SERVER_DATA_SOURCE_CACHE)) {
            MemoryCache<String, byte[]> cache = MemoryCache.createArrayByteCache(600);
            return new CacheServerDataSource(cache, publishMessageRepository, baseServerService, eventPublisher);
        } else {
            return new DBServerDataSource(baseServerService);
        }
    }

}