2014-10-08 77 views
1

我對Spring 2.5開發和java有一些瞭解,但我想了解更多關於現代Spring的知識,包括Boot和Data。我在看項目:如何覆蓋由SPRING BOOT提供的默認值自動配置

https://github.com/spring-projects/spring-data-examples/tree/master/rest/multi-store

我有這樣的例子在我的機器上工作,但我想重寫實例的一些方面。例如,我想指定我自己的mongo數據庫服務器和名稱以在項目中使用。看來要做的事情是創建一個指定mongo數據源的新bean,但在這種情況下我不確定如何去做。

import com.mongodb.Mongo; 
import com.mongodb.MongoClient; 
import example.person.Person; 
import example.person.PersonRepository; 
import example.treasure.Treasure; 
import example.treasure.TreasureRepository; 
import org.slf4j.Logger; 
import org.slf4j.LoggerFactory; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.EnableAutoConfiguration; 
import org.springframework.boot.context.properties.ConfigurationProperties; 
import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
import org.springframework.data.jpa.repository.config.EnableJpaRepositories; 
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; 

import javax.activation.DataSource; 
import javax.annotation.PostConstruct; 
import java.net.UnknownHostException; 

/** 
* Application configuration file. Used for bootstrap and data setup. 
* 
* @author Greg Turnquist 
* @author Oliver Gierke 
*/ 
@Configuration 
@EnableAutoConfiguration 
@EnableJpaRepositories 
@EnableMongoRepositories 
public class Application { 

    private static final Logger log = LoggerFactory.getLogger(Application.class); 

    public static void main(String[] args) { 
     SpringApplication.run(Application.class, args); 
    } 

    @Autowired PersonRepository personRepository; 
    @Autowired TreasureRepository treasureRepository; 

    @PostConstruct 
    void checkitOut() { 

     personRepository.save(new Person("Frodo", "Baggins")); 
     personRepository.save(new Person("Bilbo", "Baggins")); 

     for (Person person : personRepository.findAll()) { 
      log.info("Hello " + person.toString()); 
     } 

     treasureRepository.deleteAll(); 
     treasureRepository.save(new Treasure("Sting", "Made by the Elves")); 
     treasureRepository.save(new Treasure("Sauron's ring", "One ring to rule them all")); 

     for (Treasure treasure : treasureRepository.findAll()) { 
      log.info("Found treasure " + treasure.toString()); 
     } 
    } 
} 
+0

http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-mongodb – geoand 2014-10-08 13:45:30

+0

正如我在下面所說的,我已經改變了application.properties文件中的屬性。是否有相應的更改爲所需的Java? – kayakpim 2014-10-08 13:59:22

回答

1

的實際性能是在我掛http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html

有在暗示一個錯字馬庫斯的文檔 - 這是spring.data。 mongodb。*

我仍然不確定如何更改創建的db名稱 - 默認情況下顯示爲「測試」 - 也許這是mongodb中的默認值?

+1

「測試」名稱似乎被指定爲「spring.data.mongodb.uri」屬性的一部分。所以改變它的值,像「mongodb:// localhost/mydbname」,它應該工作。 – 2014-10-08 14:09:55

0

請參閱MongoRepositoriesAutoConfiguration,這是自動配置發生的地方。

您可以使用Spring Boot的屬性機制替換的屬性:

http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

在你的情況下,只需創建要覆蓋屬性的application.properties文件:如。 spring.data.mongo.host =,某

乾杯, 馬庫斯

+0

你能稍微擴展一下嗎?實際上,我在我的src \ main \ resources文件夾中已經有了一個application.properties文件,我正在使用它來更改服務器的默認端口。它包含:server.port = 8765 spring.data.mongo.host = somehost,但mongo變量未被使用。我應該添加一些東西到Java來啓用它?我在哪裏可以獲得我可以設置的屬性列表? – kayakpim 2014-10-08 13:50:45

+0

在回答我的評論的第二部分時,我剛剛發現了這個優秀列表,我仍然不確定主機部分爲何被忽略:http://docs.spring.io/spring-boot/docs/current/reference /html/common-application-properties.html – kayakpim 2014-10-08 13:57:09

+0

請參閱class:org.springframework.boot.autoconfigure.data.MongoProperties以獲取可用屬性。 – mreiterer 2014-10-08 14:04:15