30

MongoDB データベースで呼び出されるコレクションがあり、これはJava コードProductsのインターフェースによって表されます。IProductPrice次のリポジトリ宣言により、Spring Date は collection を参照しますdb.collection: Intelliprice.iProductPrice

に注釈をdb.collection: Intelliprice.Products付けるのではなく、外部構成を使用して検索するように構成したい。これは可能ですか?これどうやってするの?@Collection(..)IProductPrice

public interface ProductsRepository extends
    MongoRepository<IProductPrice, String> {
}
4

5 に答える 5

3

追加できる唯一のコメントは、Bean 名に @ プレフィックスを追加する必要があることです。

collection = "#{@beanName.method()}"

Bean ファクトリが Bean を注入する場合:

@Document(collection = "#{@configRepositoryCustom.getCollectionName()}")
public class Config {

}

私はそれを理解するのに苦労しました..

完全な例:

@Document(collection = "#{@configRepositoryCustom.getCollectionName()}")
public class Config implements Serializable {
 @Id
 private String uuid;
 private String profile;
 private String domain;
 private String label;
 private Map<String, Object> data;
 // get/set
}

 public interface ConfigRepositoryCustom {
   String getCollectionName();
   void setCollectionName(String collectionName);
 }

@Component("configRepositoryCustom")
public class ConfigRepositoryCustomImpl implements ConfigRepositoryCustom {
 private static String collectionName = "config";
 @Override
 public String getCollectionName() {
  return collectionName;
 }
 @Override
 public void setCollectionName(String collectionName) {
 this.collectionName = collectionName;
 }
}

@Repository("configurations")
public interface ConfigurationRepository extends MongoRepository<Config, String>, ConfigRepositoryCustom {
  public Optional<Config> findOneByUuid(String Uuid);
  public Optional<Config> findOneByProfileAndDomain(String profile, String domain);
}

serviceImpl での使用:

@Service
public class ConfigrationServiceImpl implements ConfigrationService {
 @Autowired
 private ConfigRepositoryCustom configRepositoryCustom;

 @Override
 public Config create(Config configuration) {
   configRepositoryCustom.setCollectionName( configuration.getDomain() ); // set the collection name that comes in my example in class member 'domain'
   Config configDB = configurationRepository.save(configuration);
   return configDB;
}
于 2019-02-16T17:30:28.200 に答える