上一篇Spring Boot咱們簡單講了如何快速建立一個SpringBoot項目。你們都知道SpringBoot很是強大,能夠輕鬆與各類工具集成,可是咱們知其然,也必須知其因此然。今天開始就和你們一塊兒學習一下SpringBoot核心,核心因爲過於重要,須要分紅好幾章,今天咱們先來看看基本配置。
使用過或者瞄過一眼Spring Boot工程的小夥伴都知道, SpringBoot有一個特別顯著的特色, 就是每一個SpringBoot工程都會有一個入口類, 在這個入口類上都會有這麼一個註解@SpringBootApplication。 這個類中有一個main方法,main方法中使用 SpringApplication.run(*Application.class,args), 用來啓動SpringBoot項目。以下所示:
public static void main(String[] args) { SpringApplication.run(Createproject2Application.class, args); }
@SpringBootApplication是Spring Boot的核心註解, 它是一個組合註解 (一般咱們稱由多個註解組成的註解叫組合註解)。點進去瞧一眼
@Target({ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Inherited @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan( excludeFilters = {@Filter( type = FilterType.CUSTOM, classes = {TypeExcludeFilter.class} ), @Filter( type = FilterType.CUSTOM, classes = {AutoConfigurationExcludeFilter.class} )} ) public @interface SpringBootApplication {
@SpringBootApplication註解主要(我這裏說了主要喔)組合了 @Configuration,@EnableAutoConfiguration,@ComponentScan 言外之意就是能夠將這三個註解直接替換@SpringBootApplication
- @EnableAutoCOnfiguration讓Spring Boot根據類路徑中的jar包依賴爲當前項目進行自動配置。例如添加了spring-boot-starter-web依賴,會自動添加Tomcat和Spring MVC的依賴,Spring Boot就會對Tomcat和Spring MVC進行自動配置。
2.@ComponentScan 讓Spring Boot去掃描與入口類同級以及如下包的Bean(使用註解配置的),把他們添加到Spring容器,若爲JPA項目還能夠掃描標註@Entity的實體類。java
3.@Configuration 表示當前是一個配置類,也會被Spring進行加載web
SpringBoot爲咱們提供了自動化配置,可是在某些特定的場景下, 咱們可能不須要某個自動配置, 這時能夠在@SpringBootApplication中配置
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
什麼是Banner呢, 就是在Spring Boot項目啓動的時候最開始顯示的橫幅。 我記得我第一次啓動Spring Boot項目的時候印象最深的就是這個橫幅 心裏不斷OS(wc這麼酷炫的嗎)。 下面咱們看看怎麼自定義橫幅吧。若是不自定義,默認顯示下面圖案
固然了,這個banner也不是必需要顯示的,咱們能夠手動關閉它。
SpringApplication app = new SpringApplication(Createproject2Application.class); app.setBannerMode(Banner.Mode.OFF); app.run(args);
Spring Boot在src/main/resources下有一個全局的配置文件 application.properties或application.yml 說到yml這種配置文件,是有點東西的。全稱爲yaml,是以數據爲中心, 支持多種數據格式(如數組),在配置數據的時候具備面向對象的特徵。
在兩種配置文件中配置Tomcat的端口號和默認的訪問路徑
server.port=8888 server.servlet.context-path=/xicent
server: port: 8888 servlet: context-path: /xicent
其實咱們從簡單的實例中能夠看出,yaml的格式更加清晰,全部配置看過去一目瞭然。而且它是有序的。
在之前idea中是不支持yml提示的,如今也都支持了。
可是yaml卻引來了另外一個問題,yaml格式有嚴格的要求,稍有配錯都有可能出現問題。
所以在項目中看咱們如何去取捨了,目前默認仍是以properties爲主。spring
Spring Boot提倡的是0配置,即無xml配置,可是在實際開發中, 咱們有時不免會須要加載xml配置, 這時咱們就能夠經過Spring提供的@ImportResource來加載xml配置 例如:
@ImportResource({"classpath:some-context.xml"})
這樣咱們就成功加載xml配置啦。
在Spring Boot中,咱們大部分配置都寫在了配置文件中, 可是有些配置咱們可能須要啓動時才能肯定, 所以Spring Boot還提供了一種命令行配置方式 下面演示如何在運行jar包的時候,配置Tomcat的端口號
java -jar xx.jar --server.port=8888
在常規的Spring環境中,若是咱們想加載某個properties文件, 獲取其中的配置。一般的作法是在類上加註解@PropertiesSource() 指定配置文件的位置。 而後在類中使用@Value()加載屬性。 在Spring Boot中, 咱們只需在application.properties中定義屬性, 直接用@Value注入便可。
1.application.properties增長屬性segmentfault
xicent.author=kris xicent.age=1
2.修改入口類數組
@Value("${xicent.author}") String name; @Value("${xicent.age}") int age; @RequestMapping("/") String index(){ return "author is"+name+",age is"+age; }
通用咱們用@Value都是獲取properties配置文件中配置的屬性, 可是@Value的功能可不遠遠不止這一點喔。 經過@Value註解, 咱們還能獲取系統屬性,url,隨機數,文字流等等。
// 普通字符串 @Value("xicent") private String str; // 操做系統名稱 @Value("#{systemProperties['os.name']}") private String osName; // 隨機數 @Value("#{T(java.lang.Math).random()*168.0}") private double randomNumber; // 其餘bean的屬性 @Value("#{demoService.another}") private String fromAnother; // 獲取文件資源 @Value("classpath:banner.txt") private Resource file; // 獲取地址資源 @Value("http://www.baidu.com") private Resource url; public void testValue() throws IOException { System.out.println(getStr()); System.out.println(getOsName()); System.out.println(getRandomNumber()); System.out.println(getFromAnother()); System.out.println(IOUtils.toString(file.getInputStream(),"UTF-8")); System.out.println(IOUtils.toString(url.getInputStream())); } //省略getter,setter方法
訪問接口安全
@RequestMapping("/testvalue") void testValue() throws IOException { xicentBean.testValue(); }
上面的例子,咱們每一個屬性都要使用@Value註解會顯得格外的麻煩, 咱們配置的屬性一般會是許多個。 在Spring Boot中使用@ConfigurationProperties 將配置與bean相關聯, 這就是所謂的類型安全的配置。 這裏將配置配在一個專門的properties文件中, 固然也能直接配置在application.properties中
1.resources文件夾下新增xicent.properties文件,添加以下屬性app
xicent.author=kris xicent.age=1
2.建立一個類dom
@Component @PropertySource("classpath:xicent.properties") @ConfigurationProperties(prefix = "xicent") public class XicentBean { private String author; private int age;
代碼解釋:@PropertySource能夠指定咱們須要加載的文件的路徑。@ConfigurationProperties指定咱們屬性配置的前綴
3.建立接口訪問ide
@Autowired XicentBean xicentBean; @RequestMapping("/xicent") XicentBean getXicent(){ return xicentBean; }
4.請求接口spring-boot
Profile是Spring用來針對不一樣環境使用不一樣的配置文件。 通常命名爲:application-{profile}.properties (如application-prod.properties)。 而後在application.properties中 設置spring.profiles.active=prod來指定活動的Profile。 下面演示生產環境(prod)使用8888端口, 開發環境(dev)使用9999端口
1.建立application-prod.properties,配置生產環境的端口
server.port=8888
2.建立application-dev.properties,配置開發環境的端口
server.port=9999
3.application.properties中指定生效的profile
spring.profiles.active=prod
4.啓動項目,能夠看到prod配置文件生效了,綁定端口爲8888
疑問:若是我application.properties和application-prod.properties都配了端口,哪一個會生效呢? 答案是prod的會生效
ok,今天就暫時分享這麼多啦,以上講的是Spring Boot中的基本配置,其中有不少地方都是能夠深挖單獨拿出來說的。
今天這裏只講了一些基本的,比較經常使用的基本配置,後續咱們還會再詳細分享。
喜歡的小夥伴能夠關注公衆號:喜訊XiCent 有任何問題能夠隨時問我喔~