Динамическая загрузка типа данных с помощью Springboot @Conditional - PullRequest
0 голосов
/ 05 ноября 2019

Я хотел бы загрузить тип базы данных (Cassandra или MongoDB) в моем классе Springboot Service в зависимости от некоторых условий. Для этого я планировал использовать аннотацию @Conditional, упомянутую в https://sivalabs.in/2016/03/how-springboot-autoconfiguration-magic/.

. В моем случае я расширяю org.springframework.stereotype. Интерфейс репозитория для создания репозитория, как показано ниже.

В моем классе обслуживания, как я могу получить экземпляр типа Cassandra или Mongo Type на основе профиля или конфигурации в application.yml?

СпасибоАшиш

@Repository
public interface CartCassandraRepository extends CrudRepository<com.cassandra.Cart, String> {

}

@Repository
public interface MongoCassandraRepository extends CrudRepository<com.mongo.Cart, String> {

}

Вот мой com.cassandra.Cart.java

import org.springframework.data.cassandra.core.cql.PrimaryKeyType;
import org.springframework.data.cassandra.core.mapping.CassandraType;
import org.springframework.data.cassandra.core.mapping.Column;
import org.springframework.data.cassandra.core.mapping.PrimaryKeyColumn;
@Table("Cart")
public class Cart  {


    @PrimaryKeyColumn(ordinal = 0, type = PrimaryKeyType.PARTITIONED)
    @GeneratedValue(strategy = GenerationType.AUTO)
    protected String id;

    @PrimaryKeyColumn(ordinal = 1, type = PrimaryKeyType.PARTITIONED)
    private String userId;

    @PrimaryKeyColumn(ordinal = 2, type = PrimaryKeyType.CLUSTERED, ordering = Ordering.DESCENDING)
    private String productId;
}

Вот мой com.mongo.Cart.java

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field

@Document(collection = "Cart")
public class Cart  {

    @Id
    protected String id;

    @Indexed(unique = true)
    @Field(value = "UserId")
    private String userId;

    @Field(value = "ProductId")
    private String productId;
}

ВотКласс обслуживания

public class CartServiceImpl{

    @Autowired
    CassandraCartRepository cassandraCartRepository;

    @Autowired
    MongoCartRepository mongoCartRepository;

    public Cart save(CartDTO cart){
        // based on configuration or profile load com.mongo.Cart or com.cassandra.Cart
        // based on the configuration or profile do mongoCartRepository.save(cart) or cassandraCartRepository.save(cart)
    }
}
...