spring boot初步嘗試

第一次知道spring boot這個項目是爲在學習spring的時候,在官網上看到的,那個時候不知道這個項目是幹嗎的,也就沒再繼續關注了css

這些天實習沒什麼事作,一直沒用spring框架了,就想着去官網上看看有什麼變化,再次看到spring boot這個項目,決定進去看看,反正開學要交的課程設計也就是對數據庫的增刪改查作個看的過去的小網站,因而就決定在官網上看看怎麼用,而後完成課程設計,期間還遇到了很多問題,加上用百度搜索spring boot 結果基本都是hello world,因此遇到一個問題得花很長世間解決,不過爲發如今stackoverflow上卻是有很多解決spring boot的問題。html

先說下spring boot是用來幹嗎的吧,官網上說的是 用來快速構建項目的一個工具(大概是這麼個意思)java

spring boot基本上是用的註解配置,固然也可使用xml配置,可是推薦使用註解配置,我認爲,若是想使用xml配置的話,就不必使用sprong boot了mysql

spring boot的註解配置很簡單,雖然spring mvc 也有全註解配置,可是爲感受挺複雜的,以前準備學習spring mvc的全註解配置的,可是百度搜索了一下,結果很坑爹,全是使用xml配置,而後再代碼裏面使用註解 注入 和IOC,這就算是全註解了,對於百度搜索技術問題,我已經要崩潰了,並且接近十年前的結果還保留着,爲也真是醉了(吐槽下)git

反正我的以爲spring mvc的註解配置比較複雜,spring boot的註解配置挺簡單github

而後,使用spring boot 推薦使用項目管理工具,我使用的是maven,這樣,spring boot就能統一管理jar包了,這也是爲比較喜歡的地方,終於不在有jar包衝突了,終於不會再少包了,好比想要使用spring aop的功能,只須要在pom.xml中加上一句web

<dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
 </dependency>

而後它就會把aop使用的jar包都會弄下來,就不用本身一個一個的依賴了,這對於那些對aop不熟的同窗很是方便了(好比說我),不用考慮jar包導全美,聲明一句就能夠直接使用了,爲查了下spring aop貌似還有依賴aspectj這個項目,要是對這個不熟悉,少了個jar包,到時候報錯了都不知道怎麼處理了redis

ok,說了這麼多,先說下爲是怎麼學習的吧,我是先去官網上,按照上面的quick start,弄一個hello world出來,(百度spring boot獲得的結果基本也是別人弄個hello world)spring

而後我就把spring boot 的reference簡單的掃視了一遍,有個大概的瞭解,而後直接去github上把spring boot 的項目拉下來,裏面有各類示例,照着裏面學確實挺簡單的,遇到問題就去stackoverflow上搜索一下,基本都可以解決sql

而後就能基本使用spring boot了

以前學習spring mvc 也是在官網上學習的,而後通過此次學習爲發現,學習這些技術上的東西去官網上看也不怎麼很難看懂(簡單使用),由於書上講的基本都能在官網上學到,爲剛開始學習web的時候也是買了一本java web的書學習,首先書上的版本就不是很新,(貌似實際的項目用的版本都不是很新),而後書上講的也都是一些比較淺顯的應用。我認爲仍是去官網上看,而後把官方的例子代碼下載下來看,學習 這樣比較有效率

此次學習spring boot 我也學習到了一些其餘的知識,好比說aop,此次在裏面加了個日誌模塊,就是想學習下aop,使用的jpa,這個對於小的課程設計是很是方便的,固然,確定會存在效率問題,可是對於課程設計不存在這些問題。此次在項目裏面基本上都打印了log,方便找問題,頁面使用的是freemarker,這個在使用spring boot的時候遇到了很多問題,如今還存在的一個問題是session的值在頁面中去不到,因而爲就在類裏面弄了個靜態變量,保存,在攔截器post那個方法裏面每次都再設置進去,還使用了redis保存了session的值,可是redis在啓動的時候,好像是沒初始化,一直報錯,所以仍是隻能用靜態變量了,看之後可不能夠解決,而後使用了spring test,我以前就接觸過spring test了

以爲挺好用的(主要是有回滾)

說了這麼多,爲也把spring boot 的配置弄上來,之後好作個參照

首先是pom的依賴

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.5.RELEASE</version>
    </parent>

在pom中加上這個,spring boot推薦這麼作,若是項目已是某個項目的子項目了,也是有解決方案的,官網上有寫,爲沒仔細看,因此也沒記住怎麼解決

而後想要用spring mvc的話 繼續在pom中添加依賴

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>

這樣有關mvc的jar包就所有下載下來了

而後就是Hello World了,爲就把官網上的例子複製下來

package hello;

import org.springframework.boot.*;
import org.springframework.boot.autoconfigure.*;
import org.springframework.stereotype.*;
import org.springframework.web.bind.annotation.*;

@Controller
@EnableAutoConfiguration
public class SampleController {

    @RequestMapping("/")
    @ResponseBody
    String home() {
        return "Hello World!";
    }

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

而後運行這個main方法,在瀏覽器裏面輸入localhost:8080就能看到Hello World了

spring boot的全部項目都是從main方法啓動的,mvc默認使用tomcat,默認端口8080,tomcat不須要本身配置,它會自動下載tomcat的jar包

想換成jetty啓動的話,在pom裏面添加依賴

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jetty</artifactId>
        </dependency>

而後再從新啓動下,就能夠發現是jetty啓動了(看打印的日誌)

說到tomcat 和jetty 我就不得不吐槽了,不知道爲發現的這個問題是否是存在,仍是我本身使用錯,當爲使用tomcat的時候若是有一個action的key是 /user/login(controller上mapping "user", 方法上mapping "login"),另外一個action也同樣,key爲 /goods/add  若是爲已經觸發了/user/login,而且進入了相應的頁面,頁面中有個連接觸發action(url爲 /goods/add) 實際上並不會觸發/goods/add 而是請求錯誤,實際的url看地址欄裏面是 /user/goods/add 因此我就無語 首字母爲/  不是表明着根目錄嗎?因此之前使用tomcat的時候都是在頁面上加上上下文地址.

在使用jetty以後,爲發現上面這個問題解決了,因此,爲如今一直使用jetty啓動項目,貌似網上也是都推薦使用jetty的

說遠了,繼續spring boot

spring 的默認配置文件爲application.properties,一些配置和參數均可以寫在裏面

好比

#freemarker
spring.freemarker.suffix=.html
spring.freemarker.content-type=text/html
spring.freemarker.expose-session-attributes=true
spring.freemarker.expose-request-attributes=true
spring.freemarker.expose-spring-macro-helpers=true
spring.freemarker.request-context-attribute=request
spring.freemarker.allow-request-override=true
spring.freemarker.enabled=true

#datasource
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/design?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=luolei1994

#jpa
spring.jpa.show-sql=false

#server
server.port=8080
server.tomcat.uri-encoding = UTF-8

# REDIS (RedisProperties)
spring.redis.host=127.0.0.1
spring.redis.password=luolei
spring.redis.port=6379
spring.redis.pool.max-idle=8
spring.redis.pool.min-idle=0
spring.redis.pool.max-active=8
spring.redis.pool.max-wait=-1

#logger
logging.path=
logging.file=
logging.config=

#key
key = luolei

#test
index=luolei

這樣的話,修改項目的配置是很是方便的

固然,以前的Hello World 配置類上那麼多註解也都是沒必要要了

能夠這樣寫

@SpringBootApplication
public class Application extends WebMvcConfigurerAdapter {

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

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        super.addInterceptors(registry);
        registry.addInterceptor(new LoginInterceptor());
    }
}

能夠不用繼承任何類,我是由於要添加interceptor,因此繼承了WebmvcConfigAdapter

官網上解釋 @SpringBootApplication 這個註解,== @Configuration + @EnableAutoConfiguration + @ConponentScan 這三個註解

不過要注意配置類的位置,要在項目的最外層,否則沒法掃描到全包

默認的靜態文件夾爲resourcs 下的static,或者public(能夠看官網,不止這兩個名字),把一些靜態資源(js,css,images)放在裏面是不會被攔截的,這樣就解決了spring mvc靜態資源被攔截的問題了(雖然解決很簡單)

今天就說到這裏了,都這個點了,還在公司裏寫博客,

爲發現本身的話變多了,沒有像以前的幾篇博客裏面都是代碼了,這樣挺好的,純代碼沒多大意思,重要的是本身的理解,繼續努力,爭取大四上找個好工做,加油

相關文章
相關標籤/搜索