Я хотел бы загрузить тип базы данных (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)
}
}