隨著動態(tài)語言的流行(Ruby,Groovy,Scala,Node.js),Java的開發(fā)顯得格外的笨重;繁多的配置,低下的開發(fā)效率,復(fù)雜的部署流程以及第三方技術(shù)集成難度大.
成都創(chuàng)新互聯(lián)公司專注于鎮(zhèn)原企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城網(wǎng)站定制開發(fā)。鎮(zhèn)原網(wǎng)站建設(shè)公司,為鎮(zhèn)原等地區(qū)提供建站服務(wù)。全流程按需定制設(shè)計,專業(yè)設(shè)計,全程項目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務(wù)在上述環(huán)境 下,Spring Boot應(yīng)運而生.它使用"習(xí)慣優(yōu)于配置"(項目中存在大量的配置,此外還內(nèi)置一個習(xí)慣性的配置,讓你無須手段進行配置)的理念讓你的項目快速運行起來.
使用Spring Boot很容易創(chuàng)建一個獨立運行(運行jar,內(nèi)嵌Servlet容器),準生產(chǎn)級別的基于Spring框架的項目,使用Spring Boot你可以不用或者只需要很少的Spring配置.
Spring Boot的優(yōu)缺點
優(yōu)點 :
(1) 快速構(gòu)建項目;
(2) 對主流開發(fā)框架的無配置集成;
(3) 項目可獨立運行,無須外部依賴 Servlet容器;
(4) 提供運行時的應(yīng)用監(jiān)控;
(5) 極大地提高了開發(fā),部署效率;
(6) 與云計算的天然集成.
缺點 :
(1) 書籍文檔少且不夠深入;
(2) 如果你不認同Spring框架,這也許是它的缺點,但建議你一定要使用Spring框架.
快速入門
設(shè)置Spring boot的parent
說明 : Spring Boot的項目必須要將parent設(shè)置為Spring boot的parent, 該parent包含了大量的默認的配置,大大簡化了我們的開發(fā).
導(dǎo)入Spring Boot的web支持
添加Spring Boot的插件
編寫第一個Spring Boot的應(yīng)用
@Controller
@SpringBootApplication
@Configuration
public class HelloApplication {
@RequestMapping("hello")
@ResponseBody
public String hello() {
return "hello world!";
}
public static void main(String[] args) {
SpringApplication.run(HelloApplication.class, args);
}
}
代碼說明 :
1 : @SpringBootApplication : Spring Boot項目的核心注解, 主要目的是開啟自動配置;
2 : @Configuration : 這是一個配置Spring的配置類;
3 : @Controller : 標(biāo)明這是一個SpringMVC的Controller控制器;
4 : main方法 : 在main方法中啟動一個應(yīng)用,既 : 這個應(yīng)用的入口;
啟動應(yīng)用
在Spring Boot項目中,啟動的方式有兩種,一種是直接run Java Application另外一種是通過Spring Boot的Maven插件運行.
Spring Boot的核心
入口類和@SpringBootApplication
Spring Boot的項目一般都會有*Application的入口類,入口類中會有main方法,這是一個標(biāo)準的Java應(yīng)用程序的入口方法.
@SpringBootApplication注解是Spring Boot的核心注解,它其實是一個組合注解;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ConmpnentScan(excludeFilters = {
@Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
@Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class)
})
public @interface SpringBootApplication {}
該注解主要組合了以下注解 :
1 : @SpringBootConfiguration : 這是Spring Boot項目的配置注解,這也是一個組合注解 :
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration{}
在Spring Boot項目中推薦使用@SpringBootConfiguration替代@Configuration
2 : @EnableAutoConfiguration : 啟用自動配置,該注解會使Spring Boot根據(jù)項目中依賴的jar包自動配置項目的配置項 :
a) 如 : 我們添加了Spring-boot-starter-web的依賴,項目中也就會引入SpringMVC的依賴,Spring Boot就會自動配置tomcat和SpringMVC
spring-boot-starter-web : 1.5.2.RELEASE[compile]
spring-boot-starter : 1.5.2.RELEASE[compile]
spring-boot-starter-tomcat : 1.5.2.RELEASE[compile]
tomcat-embed-core : 8.5.11[compile]
tomcat-embed-el : 8.5.11[compile]
tomcat-embed-websocked : 8.5.11[compile]
tomcat-embed-core : 8.5.11(omitted for conflict with 8.5.11)[compile]
hibernate-vaildator : 5.3.4.Final[compile]
jackson-databind : 2.8.7[compile]
spring-web : 4.3.7.RELEASE(omitted for confilct with 4.3.7.RELEASE)[compile]
spring-webmvc : 4.3.7.RELEASE(omitted for confilct with 4.3.7.RELEASE)[compile]
3 : @ComponentScan : 默認掃描@SpringBootApplication所在類的同級目錄以及它的子目錄.
關(guān)閉自動配置
Spring Boot會根據(jù)項目中的jar包依賴,自動做出配置,Spring Boot支持的自動配置(非常多);
比如 : 我們不想自動配置Redis,想手動配置.
@SpringBootApplication(exclude = {RedisAutoConfiguration.class})
public class HelloApplication {
}
如果不想看到banner,可以將其關(guān)閉 :
public static void main(Stirng[] args) {
SpringApplication app = new SpringApplication(HelloApplication.class, args);
app.setBannerMode(Banner.Mode.OFF); //關(guān)閉banner
app.run-正在西部數(shù)碼(www.west.cn)進行交易(args);
}
Spring Boot項目使用一個全局的配置文件application.properties或者是application.yml,在resources目錄下或者類路徑下的/config下,一般我們放到resources下。
1、 修改tomcat的端口為8088(server.port=8088)
2、 修改進入DispatcherServlet的規(guī)則為:.html(server.servlet.path=.html)
Xml配置文件
Spring Boot提倡零配置,既無xml配置,但是在實際項目中,可能有一些特殊要求你 必須使用 xml配置,這時我們可以通過Spring提供的@ImportResource來加載xml配置,
例如 :
@ImportResource({"classpath:some-context.xml","classpath:another-context.xml"})
日志
Spring Boot對各種日志框架都支持,通過配置修改默認的日志的配置 :
#設(shè)置日志級別
logging.level.org.springframework=DEBUG
格式 :
logging.level.*= # log levels serverity. For instance 'logging.level.org.springframework=DEBUG'
Spring Boot的自動配置的原理
Spring Boot在進行SpringApplication對象實例化時會加載META-INF/spring.factories文件,將該配置文件中的配置載入到Spring容器.
進入規(guī)則為 /
如果進入SpringMVC的規(guī)則為/時,Spring Boot的默認靜態(tài)資源的路徑為:
spring.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/
進入規(guī)則為*.xxx 或者 不指定靜態(tài)文件路徑時
將靜態(tài)資源放置到webapp下的static目錄中即可通過地址訪問:
自定義SpringMVC的配置
有些時候我們需要自已配置SpringMVC而不是采用默認,比如說增加一個攔截器,這個時候就得通過繼承WebMvcConfigurerAdapter然后重寫父類中的方法進行擴展。
在Spring Boot中推薦使用@Transaction注解來申明事務(wù).
首先需要導(dǎo)入依賴 :
當(dāng)引入jdbc依賴之后,Spring Boot會自動默認分別注入DataSourceTransactionManager或JpaTransactionManager,所以我們不需要任何額外配置就可以用@Transactional
注解進行事務(wù)使用.
例如 :
在service中添加@Transactional注解 :
發(fā)布到獨立的tomcat中運行
在開發(fā)階段我們推薦使用內(nèi)嵌的tomcat進行開發(fā),因為這樣會方便很多,但是到生成環(huán)境,我們在獨立的tomcat容器中運行,因為我們需要對tomcat做額外的優(yōu)化,這時我們
需要將工程打成war包進行發(fā)布到外部的tomcat里面.
工程的打包方式為war
將spring-boot-starter-tomcat的范圍設(shè)置為provided
設(shè)置為provided是打包時會將該包排除,因為要放到獨立的tomcat中運行,是不需要的.
修改代碼,設(shè)置啟動配置
需要集成SpringBootServletInitializer,然后重寫configure,將Spring Boot的入口類設(shè)置進去.
需要啟動類繼承需要集成SpringBootServletInitializer
@Configuration
@PropertySource(value = {"classpath:jdbc.properties", "classpath:env.properties", "classpath:httpclient.properties"})
@ComponentScan(basePackages = "con.taotao")
@ImportResource(value = "classpath:dubbo/dubbo-consumer.xml") // dubbo的配置文件,將dubbo整合到spring容器中
@SpringBootApplication
public class TaobaoApplication extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
// 設(shè)置啟動類,用于獨立tomcat運行的入口
return builder.sources(TaotaoApplication.class);
}
}
maven命令 : clean package // 把項目打包成war包.
把打包成war的項目放到tomcat的webapps的ROOT里面,并解壓.
在配置Mybatis時使用java配置
@Configuration
@AutoConfiureAfter(MyBatisConfig.class) // 保證在MyBatisConfig實例化之后再實例化該類
public class MapperScannerConfig {
// mapper接口的掃描器
@Bean
public MapperScannerConfigurer mapperScannerConfigurer() {
MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();
mapperScannerConfigurer.setBasePackage("com.taotao.cart.mapper");
return mapperScannerConfigurer;
}
}
全局捕獲異常
新建一個Class,這里取名為GlobalDefaultExceptionHandler;
在class上添加注解,@ControllerAdvice;
在class中添加一個方法;
在方法上添加@ExceptionHandler攔截相應(yīng)的異常信息;
如果返回的是View -- 方法的返回值是ModelAndView;
創(chuàng)新互聯(lián)www.cdcxhl.cn,專業(yè)提供香港、美國云服務(wù)器,動態(tài)BGP最優(yōu)骨干路由自動選擇,持續(xù)穩(wěn)定高效的網(wǎng)絡(luò)助力業(yè)務(wù)部署。公司持有工信部辦法的idc、isp許可證, 機房獨有T級流量清洗系統(tǒng)配攻擊溯源,準確進行流量調(diào)度,確保服務(wù)器高可用性。佳節(jié)活動現(xiàn)已開啟,新人活動云服務(wù)器買多久送多久。