2016-11-23 6 views
2

私はSpringBootを使用してMongoデータベースと通信しようとしています。私の春のブート(mongo)beanが作成/使用されていないのはなぜですか?

spring-boot-startter-data-mongodbを使って動作していて、MongoRepositoryクラスがDB okと話すことができるデフォルトのbeanを自動的に設定しています。

ただし、デフォルトを上書きしたいと思います。私はapplication.propertiesを使うことができましたが、アプリケーションの起動時にコマンドラインでオプションとして接続パラメータを渡せるようにする必要があります。

私はそれを壊すためにポートを変更しようとしました、私はMongoの設定にデバッグを追加しました。 @Configurationアノテーションが無視されているかのようです。

私は主なアプリケーションクラス(confの場所を指定し、@Configurationをメインクラスに追加し、@SpringBootApplicationの有無にかかわらず...)を構成する様々な味を試しましたが、ここに私は今どこにいるのですか?

答えて

1

実際には、SpringブートMongoDb Starterの機能と関連する自動設定をアプリケーションのプロパティで使用する必要があります。カスタムホスト、ポート、パスワードなど、専用Spring Boot MongoDB Propertiesを経由して設定する必要がありますすることができますサポートされるプロパティの完全なリストに

spring.data.mongodb.authentication-database= # Authentication database name. 
spring.data.mongodb.database=test # Database name. 
spring.data.mongodb.field-naming-strategy= # Fully qualified name of the FieldNamingStrategy to use. 
spring.data.mongodb.grid-fs-database= # GridFS database name. 
spring.data.mongodb.host=localhost # Mongo server host. 
spring.data.mongodb.password= # Login password of the mongo server. 
spring.data.mongodb.port=27017 # Mongo server port. 
spring.data.mongodb.repositories.enabled=true # Enable Mongo repositories. 
spring.data.mongodb.uri=mongodb://localhost/test # Mongo database URI. When set, host and port are ignored. 
spring.data.mongodb.username= # Login user of the mongo server. 

、リンクがhereです。 MongoPropertiesについてRafalGの提案に加えて

+0

そうです、はい。しかし、これはオプションではありません。 これらのプロパティをコードからの接続に設定する必要があります。 – DaFoot

+1

それから、あなた自身で 'org.springframework.boot.autoconfigure.mongo.MongoProperties'型のBeanを作成します。デフォルトのものよりも優先されます。 –

+0

これは有望そうです – DaFoot

0

、私はApplicationArgumentsクラスで、今、私は非、(ヌルを追加するためにエラー処理の多くがあります....どこもちろん

@Bean 
@Primary 
public MongoProperties mongoProperties(ApplicationArguments args) { 
    MongoProperties props = new MongoProperties(); 
    String[] mongoHostAndPort = args.getSourceArgs()[3].split(":"); 
    props.setHost(mongoHostAndPort[0]); 
    props.setPort(Integer.parseInt(mongoHostAndPort[1])); 
    return props; 
} 

@Bean 
public MongoClientFactoryBean mongo() { 
    return new MongoClientFactoryBean(); 
} 

を得ていることを組み合わせます他の人を助けるかもしれないならうまくいけば。

0
@Configuration 
@EnableAutoConfiguration(exclude = { EmbeddedMongoAutoConfiguration.class }) 
@Profile("!testing") 
public class TestMongoConfig extends AbstractMongoConfiguration { 

private static final MongodStarter starter =  MongodStarter.getDefaultInstance(); 

private MongodExecutable _mongodExe; 
private MongodProcess _mongod; 
private MongoClient _mongo; 

@Value("${spring.data.mongodb.host}") 
private String host; 

@Value("${spring.data.mongodb.port}") 
private Integer port; 

@Override 
protected String getDatabaseName() { 
    return "test"; 
} 


@Bean 
public Mongo mongo() throws Exception { 
    _mongodExe = starter.prepare(new MongodConfigBuilder() 
         .version(Version.Main.PRODUCTION) 
         .net(new Net(port, Network.localhostIsIPv6())) 
         .build()); 
    _mongod = _mongodExe.start(); 
    return new MongoClient(host, port); 
} 

@Override 
public String getMappingBasePackage() { 
    return "com.test.domain"; 
} 
関連する問題