以下のコードのように、Mongoリポジトリを使用してCRUD操作を実行しています。このコードは機能しますが、ドキュメントとコレクションは、必要なDBとは異なるDBで作成されます。ドキュメントを保存するDB名を明示的に指定するにはどうすればよいですか。
POJOクラス:
@Document(collection = "actors")
public class Actor
{
@Id
private String id;
...
//constructor
//setters & getters
}
リポジトリ:
public interface ActorRepository extends MongoRepository<Actor, String>
{
public Actor findByFNameAndLName(String fName, String lName);
public Actor findByFName (String fName);
public Actor findByLName(String lName);
}
リポジトリを使用するサービス:
@Service
public class ActorService
{
@Autowired
private ActorRepository actorRepository;
public Actor insert(Actor a)
{
a.setId(null);
return actorRepository.save(a);
}
}
そして、RESTコントローラクラスからサービスにアクセスします。
@RestController
public class Controllers
{
private static final Logger logger = Logger.getLogger(Controllers.class);
private static final ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringMongoConfig.class);
@Autowire
private ActorService actorService;
@RequestMapping(value="/createActor", method=RequestMethod.POST)
public @ResponseBody String createActor(@RequestParam(value = "fName") String fName,
@RequestParam(value = "lName") String lName,
@RequestParam(value = "role") String role)
{
return actorService.insert(new Actor(null,fName,lName,role)).toString();
}
...
}
私はこの春のmongoDB構成クラスを作成しましたが、これにはDB名を設定するオプションがありますが、上記のリポジトリーでそれを使用する方法を理解できませんでした。
@Configuration
public class SpringMongoConfig extends AbstractMongoConfiguration
{
@Bean
public GridFsTemplate gridFsTemplate() throws Exception
{
return new GridFsTemplate(mongoDbFactory(), mappingMongoConverter());
}
@Override
protected String getDatabaseName()
{
return "MyDB";
}
@Override
@Bean
public Mongo mongo() throws Exception
{
return new MongoClient("localhost" , 27017 );
}
public @Bean MongoTemplate mongoTemplate() throws Exception
{
return new MongoTemplate(mongo(), getDatabaseName());
}
}
Application.propertiesに行を追加します
spring.data.mongodb.database=your_db_name
それは私にはうまくいきました、多分あなたには遅すぎますが、これは同じ問題を探している誰かを助けることができました。その他のプロパティを参照 ここ !
Spring-Bootの場合:
自動構成に依存してから、application.propertiesファイルに入力することができます。
spring.data.mongodb.database=your_db_name
または、Spring-bootの自動構成に依存したくない場合は、次のように簡単にできます。
import com.mongodb.MongoClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;
/**
* MonfoConfig
*/
@Configuration
public class MongoConfig {
@Bean
public MongoDbFactory mongoDbFactory() {
MongoClient mongoClient = new MongoClient("127.0.0.1:27017");
return new SimpleMongoDbFactory(mongoClient, "databasenamehere" );
}
@Bean
public MongoTemplate mongoTemplate() {
return new MongoTemplate(mongoDbFactory());
}
}
あなたがその道を進みたいなら、私はSpring Bootの状態評価レポート( https://www.baeldung.com/spring-boot-auto-configuration-report )を調べて微調整することをお勧めしますあなたが微調整する必要があるもの。お役に立てれば。
FWIW、Samの状況では解決策が機能しないにもかかわらず、上記のSezin KarliとSamのコードの組み合わせを使用して、mongoデータベース名を変更できます。
私のPOMファイルには、mongodbへのこの参照のみが含まれています。
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-mongodb</artifactId>
</dependency>
具体的には、まず、リソースに次の情報を含むbeans.xmlファイルを作成しました。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xsi:schemaLocation="http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<mongo:mongo-client credentials="user:password@database" />
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongo" ref="mongo"/>
<constructor-arg name="databaseName" value="myDBName"/>
</bean>
</beans>
次に、メインを変更して設定をロードします:
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
注:これはmain()で最初に実行する必要があります。
最後に、extends AbstractMongoConfiguration
開始クラスに実装されました
@Override
public String getDatabaseName() {
return "myDBName";
}
@Override
@Bean
public Mongo mongo() throws Exception {
return new MongoClient("localhost" , 27017 );
}
データベース名は2つの場所で指定されました。残念ながら、これは成功に必要なようです。
あなたの設定はサムのようです。 「MyDB」というデータベースがあることを確認しますか?または、以下のように他の場所(アプリコンテキストxmlなど)でもデータベース名を設定しないようにしていますか?.
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg name="mongo" ref="mongo"/>
<constructor-arg name="databaseName" value="demo"/>
</bean>