本文參考javaEE開發的顛覆者SpringBoot實戰第一版
基本配置
入口類和@SpringBootApplication
Spring Boot通常有一個名為*Application的入口類,且入口類有一個main方法,這個main方法就是標志的java應用入口方法。調用main方法就可以啟動springboot應用。
@SpringBootApplication是springboot的核心注解,它是一個組合注解
涉及到啟動Springboot項目的核心注解:@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan。
注:@EnableAutoConfiguration可以讓SpringBoot根據類路徑中的jar包依賴為當前項目進行配置。
例如:添加了spring-boot-start-web依賴,就會自動添加Tomcat與SpringMVC依賴,且會對Tomcat和SpringMVC進行配置。
添加了spring-boot-start-data-jpa依賴,springboot就會進行JPA的相關配置。
注:SpringBoot會自動掃描@SpringBootApplication所在類的同級包以及下級包里的Bean(若為JPA還會掃描@Entity)。所以一般入口類都會放在包的根目錄下。
關閉特定的自動配置
通過@SpringBootApplication注解的參數exclude參數實現:
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
定值Banner
(個人認為這個有點惡趣味啊,哈哈。我還是很喜歡默認的banner)
1.修改banner
在springboot啟動時會有默認的圖標:
在src/main/resources下新建一個banner.txt
可以在http://patorjk.com/software/taag網站生成字符,我敲入的是memeda,然后將生成的字符復制給banner.txt。
再啟動時就可以實現改變:
2.關閉banner
(1)修改main中的代碼:
注:這一段是與書中有出入的,書中使用的是app.setShowBanner(false)
public static void main(String[] args) { SpringApplication app = new SpringApplication(LilinlearnApplication.class); app.setBannerMode(Banner.Mode.OFF); app.run(args); }
(2)或使用fluent API修改為:
public static void main(String[] args) { new SpringApplicationBuilder(LilinlearnApplication.class) .bannerMode(Banner.Mode.OFF) .run(args); }
SpringBoot配置文件
SpringBoot使用一個全局的配置文件application.properties或application.yml,配置文件路徑:src/main/resource目錄下或類路徑下的/config下。
注:這兩種配置文件的區別是格式不一致,示例均采用.properties格式,但實際上以后的主流應該是以yml為主的。
示例:
修改端口和與默認路徑:
server.port=9090
server.context-path=/helloboot。
starter pom
Springboot為我們提供了簡化企業級開發絕大多數場景的starter pom。只要使用了所需要的starter pom,SpringBoot就會為我們提供自動裝配的Bean。
還有很多,具體的可以看官方文檔,或者自己去書上看。
使用XML配置
SpringBoot提倡零配置,即無XML配置,但實際上有些特殊的配置需要使用XML配置。我們可以通過Spring提供的@ImportResource來加載XML配置
@ImportResource({"classpath:some-context.xml","classpath:another-context.xml"})
外部配置
SpringBoot可以使用properties文件、yaml文件或者命令行參數作為外部配置。
命令行參數配置:
SpringBoot可以基於jar包運行,打成jar包的程序可以直接通過下面的命令行運行,並修改Tomcat端口號:
java -jar xx.jar --server.port=9090
常規屬性配置:
只需要在application.properties中定義屬性,直接在類中使用@Value注入即可。
(1)在application.properties中增加屬性:
book.author=huyifei
book.name=xueshanfeihu
(2)在類中獲取:
@RestController @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) public class LilinlearnApplication { @Value("${book.author}") private String author; @Value("${book.name}") private String name; @Autowired private Author authora; @RequestMapping("/") public String index() { return "??????" + author + name + " " + authora.getAge() + " | " + authora.getName(); } public static void main(String[] args) { new SpringApplicationBuilder(LilinlearnApplication.class) .bannerMode(Banner.Mode.OFF) .run(args); } }
類型安全的配置(基於properties)
若按照常規屬性進行注入,你會發現如果多次復用會出現很多冗余的代碼,SpringBoot就為我們提供了方法,使用@ConfigurationProperties將properties屬性和一個Bean及其屬性關聯,從而實現安全配置。
在application.properties上添加:
mail.name=eamil
mial.age=18
我們也可以新建一個properties文件,這時我們需要使用@PropertiesSource將添加的文件的位置指定。
注:這里與書中內容不同,書中的@ConfigurationProperties的locations屬性並不存在(看了源碼確實沒有),可能是因為SpringBoot的版本不同(書中1.3,現在使用的是1.5.9)
@Component @PropertySource(value = "classpath:test.properties") @ConfigurationProperties(prefix = "mail") public class Author { private String name; private String age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } }
日志配置
默認情況下,SpringBoot使用Logback作為日志框架。
配置日志級別:
logging.file=D:/mylog/log.log
配置日志文件,格式為logging.level.包名=級別:
logging.level.org.springframework.web=DEBUG
Profile配置
Profile是Spring針對不同環境不同配置的支持。
格式為:application-{profile}.properties。
只需要在application.properties中設置spring.profiles.active=prod來指定活動的profile即可。
注:這樣可以實現測試環境、開發環境、線上環境分離。