私はSpringブートで書かれたこのWebアプリケーションを主にデータベース用に使います。私は単純なエンティティを持っているし、データベースからデータをフェッチするいくつかのメソッドでCrudRepositoryを拡張するリポジトリを持っています。基本的にはこのチュートリアルのすべてhttps://spring.io/guides/gs/accessing-data-jpa/JPAとMongoをSpringブートMVCアプリに切り替える
しかし、今は2番目のデータベースが必要です。それはMongoDBでなければなりません。すべてがJPAと同じですが、今回はMongoRepositoryを拡張する新しいリポジトリクラスを用意しました。
public interface CustomerRepository extends CrudRepository<Customer, Long> {
List<Customer> findByLastName(String lastName);
}
public interface CustomerRepositoryMongo extends MongoRepository<Customer, Long> {
List<Customer> findByLastName(String lastName);
}
ここで私はCustomerRepositoryとCustomerRepositoryMongoの2つのクラスを持っています。私のメインでは、このようにDBを充填しています:
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
@Bean
public CommandLineRunner demo(CustomerRepository repository) {
return (args) -> {
// save a couple of customers
repository.save(new Customer("Jack", "Bauer"));
repository.save(new Customer("Chloe", "O'Brian"));
};
}
}
2つのdbを簡単に切り替えるにはどうしたらいいですか?プロファイルを使用し、application.propertiesのどのプロファイルをアクティブにするべきかを選択すべきだと思いますが、これは初めてのことです。私は同じ名前の両方のインターフェイスを持つことはできませんし、どういうわけか私はcommandLineRunnerにrepoを使うべきかどうかを伝える必要があります。
ありがとうございます。あなたが書いたように、私はこれらのゲッターを作成するはずですか?もしそうなら、どこ?あるいは、私が最初の質問で書いたインタフェースにBeanとProfileの注釈を付けるべきですか? – Arcane
getter(BeanとProfileアノテーション付き)はSpringブートコンポーネントスキャンの一部であるクラスに置くことができます。上のコード例では、それらをApplicationクラスに入れることができます。明らかにするには、同じクラスのプライベートフィールドをオートワイヤリングする必要があります(例:@Autowired private CustomerRepositoryMongo _customerRepositoryMongo;) –
私は理解していますが、これらのゲッタはエラー '私は_customerRepositoryを解決できません。それは彼らを知らない。 – Arcane