1. 程式人生 > >Spring Boot(1)--初識篇

Spring Boot(1)--初識篇

主要內容

  • springBoot是什麼?
  • 為什麼要使用它?
  • 開始自己的編碼
  • 測試用例
  • 配置檔案說明
  • 自定義過慮器

一、Spring Boot是何物?

         Spring Boot是由Pivotal團隊提供的全新框架,其設計目的是用來簡化新Spring應用的初始搭建以及開發過程。該框架使用了特定的方式來進行配置,從而使開發人員不再需要定義樣板化的配置。通過這種方式,Spring Boot致力於在蓬勃發展的快速應用開發領域(rapid application development)成為領導者。------

來自百度百科

         Spring Boot是Spring的約定優於配置的解決方案,用於建立可“直接執行”的獨立的、生產級的基於Spring的應用程式。它預先配置了Spring的“固執己見的觀點”,即最佳配置和Spring平臺及第三方庫的使用,因此您可以從最小的麻煩開始。大多數Spring引導應用程式只需要很少的Spring配置-----來自wikipedia的翻譯

 

二、為什麼要使用它?

        由於SpringBoot使用約定大於配置的思路,使得專案開發中只要約定一套規則,整個專案組就可以簡單、方便、快速的完成開發任務。相比於平常的專案搭建簡單高效,再一個現在微服務相當流行。僅需要非常少的幾個配置就可以迅速方便的搭建起來一套web專案或者是構建一個微服務。用上一次你就會愛上它無法自拔,哈哈。

          吧啦,吧啦,吧啦......................

好吧,多了不說~!自己體會,那種酸爽的感覺。

 

三、編碼實踐

讓我們開始這趟旅行吧~~~~

        首先,我們使用maven來構建專案,現在還有一個比較流行的構建專案的方式是Gradle,具說是結合了maven和ant的優點。由於本人目前為止也沒有使用過所以 還是不用它了。之後再學習。

步驟:

  1. 可以直接訪問:https://start.spring.io/填寫你的專案名字和group,就可以生成一個StringBoot的專案了,下載下來後放到自己的工作目錄中解壓即可。
  2. 使用eclipse或idea,匯入這個專案。-----OK 了 ,大功告成。

其目錄結構大致如下:

生成的包,如上圖所示:

  • com.xps.sc.springbootdemo這個是自動生成的包名稱,boot建議使用com.example.projectname作為包名
  • SpringBootDemoApplication框架的啟動入口,主要做一些工程級的配置
  • service業務服務包(可以根據實際業務自己建立)
  • controller面向請求的服務控制
  • domain使用的實體類,也可以是entity或bean之類的名稱。
  • test測試用例包

最後一步,引入web模組,在pom.xml中加入

<!--新增web支援模組begin-->
<dependency>
     <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--新增web支援模組end-->

現在整個框架按預設的方式已經完成了,接下來我們來建立一個服務測試一下

//@RestController的意思就是controller
// 裡面的方法都以json格式輸出,不用再寫什麼jackjson配置的了
@RestController
public class HelloBootController {

    private Logger logger = LoggerFactory.getLogger(HelloBootController.class);

    @Autowired
    private ApplicationProperties properties;

    @RequestMapping(value = "/hello/{name}")
    public String hello(@PathVariable String name){
        return "hello,"+name+" this is a hello service!!!";
    }

    /**
     * 自動組裝成json
     * {"customerId":1,"customerName":"張三"}
     * @param id
     * @return Customer
     */
    @RequestMapping(value = "/getCustomer/{id}")
    public Customer getCustomer(@PathVariable Long id){
        Customer customer = new Customer();
        customer.setCustomerId(id);
        customer.setCustomerName(properties.getName());
        customer.setDesc(properties.getDescription());
        logger.debug(properties.getDescription());
        return customer;
    }
}

現在,啟動工程,如果沒有配置則預設8080埠。可以看到它就是一個main方法,所以我們也可以使用傳統的java -jar來啟動它。

訪問:http://localhost:8000/hello/張三

可以看到服務的效果了,是不是很簡單(只處有笑臉)~!

四、測試

        一般我們喜歡自己寫一個測試用例來測試,而不是每次都啟動伺服器。我們可以在test目錄下編寫測試類(預設會生成一個測試類,只要copy它即可),這裡我們使用MockMvc:

@RunWith(SpringRunner.class)
@SpringBootTest
public class HelloBootControllerTests {

    private MockMvc mvc;
    @Before
    public void setUp() throws Exception {
        mvc = MockMvcBuilders.standaloneSetup(new HelloBootController()).build();
    }


    @Test
    public void hello() throws Exception {
        mvc.perform(MockMvcRequestBuilders.get("/hello/CelineDion")
                .characterEncoding("UTF-8").contentType(MediaType.APPLICATION_JSON_UTF8))
                .andExpect(MockMvcResultMatchers.status().isOk())
                .andDo(MockMvcResultHandlers.print())
                .andReturn();
    }

}

 

五、application.properties配置檔案

        專案預設會在src/resources根目錄下生成一個application.properties檔案,這個是SpringBoot預設載入的配置檔案,我們可以在此檔案中配置一些內容,比如:日誌級別,資料庫連線引數或者自己專案中使用的常量。

#設定spring-boot編碼格式,防止亂碼,如果加上這些還是亂碼,可以檢視
#自己的工程和工程中的檔案是否都是UTF-8編碼的,idea的設定位置在
#File---settings---Editor----File Encodings 在最下面有個default encoding for properties 選擇utf-8且後面的複選框勾選即可 
server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.messages.encoding=UTF-8
#---------------------

#myself params
com.xps.user.name=王老五-dev
com.xps.user.age=30
com.xps.user.description=${com.xps.user.name} now is ${com.xps.user.age} years old and 他非常有錢!

logging.path=E:\\workplace\\springCloud\\log
logging.level.com.xps=DEBUG
logging.level.org.springframework.web=INFO
logging.level.org.hibernate=ERROR

這樣定義完成後,我們可以使用一個類來儲存這些定義,新建立一個類(包自己定義):

@Component//加上此標籤讓spring能夠識別它是一個元件
//@ConfigurationProperties(prefix = "com.xps.p")
public class ApplicationProperties {
//使用spring的@Value即可
    @Value("${com.xps.user.name}")
    private String name;
    @Value("${com.xps.user.age}")
    private int age;
    @Value("${com.xps.user.description}")
    private String description;

   //getter and setter方法

}

這個我們就可以在需要使用的地方,按如下方式引入即可取到配置的引數

@Autowired
private ApplicationProperties properties;

雖說這樣使用也沒有問題,但一般我們都有開發環境、測試和生產環境,配置引數可能會有區別,那怎麼辦呢?springBoot也早就想到了這個問題。我們可以在appication.properties同級下新建立三個檔案,名稱為application-{profile}.properties,其中profile可以為dev\test\prod或其它自己認識的值。然後再application.properties檔案中新增

spring.profiles.active=dev

也可以在啟動時指定引數。這樣我們訪問上面的第二個服務時就是:

值得一說的是,springboot也同時支援yml檔案配置,可以把上面的application.properties換成application.yml,如果兩個同時存在的話,則使用yml檔案。

#設定服務埠
server:
  port: 8000
  tomcat:
    uri-encoding: UTF-8
#設定spring-boot編碼格式
spring:
    http:
      encoding:
        charset: UTF-8
        enabled: true
        force: true
    messages:
       encoding: UTF-8
    #環境變數
    profiles:
      active: dev

六、新增自己的Filter

       在之前開發的一般專案中,一般要先定義自己的過慮器類實現Filter,然後再到web.xml中配置這個過慮器並指定過慮路徑。在springboot中直接使用標籤即可,不需要再配置其它。

@Configuration//標籤標記是一個配置
public class WebChartConfigration {

    private Logger logger = LoggerFactory.getLogger(WebChartConfigration.class);

    @Bean
    public RemoteIpFilter getRemoteIpFilter(){
        return new RemoteIpFilter();
    }

    //註冊自己的過慮器到過慮器鏈
    @Bean
    public FilterRegistrationBean myFilterRegistration(){
        FilterRegistrationBean registration  = new FilterRegistrationBean();
        registration.setFilter(new ChartFilter());
        registration.setName("ChartFilter");
        registration.setOrder(1);
        registration.addUrlPatterns("/*");//指定過慮路徑
        registration.addInitParameter("a","a");
        return registration;
    }

    //實現javax.servlet.Filter即可
    public class ChartFilter implements Filter {
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
                             FilterChain filterChain) throws IOException, ServletException {
            HttpServletRequest request = (HttpServletRequest) servletRequest;
            logger.debug("請求的URL:"+request.getRequestURL().toString());
            filterChain.doFilter(servletRequest,servletResponse);
        }

        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
            logger.debug("ChartFilter init");
        }

        @Override
        public void destroy() {
            logger.debug("ChartFilter destroy");
        }
    }
}

總結

       可見使用SpringBoot可以很方便的搭建專案工程,可以把主要的精力用在業務處理邏輯上。這些僅僅是一個開始,我們同樣也可以像其它工程一樣為它加入資料庫、快取處理、訊息中介軟體等等。加油學習吧,路漫漫,任重道遠呀。

非常感謝,https://www.cnblogs.com/ityouknow/p/5662753.html這位博主的分享~!