Spring Boot開發之流水無情(二)

 

 

 

 

http://my.oschina.net/u/1027043/blog/406558 css

   

上篇散仙寫了一個很簡單的入門級的Spring Boot的例子,沒啥技術含量,不過,其實學任何東西只要找到第一個突破口,接下來的事情就好辦了,人最怕什麼? 我想莫過於幹一件事情,沒有下手的地方了,而當你一旦找到了這感受,就能夠很喜悅的順藤摸瓜般的探索你強烈想探索求知的某種事物了,這種冥冥之中玄而又玄的感受是什麼?回想一下: 

(1) 當你把第一個某種編程語言的Hello World的例子,成功的運行在一個IDE中 
(2) 當你第一次從老家出發到達了某個你從未涉足過的地方 
(3) 當你成功的完成了第一次網購 

一切的不相關的事物之間的,其實都有相似的學習歷程,正是所謂的舉一反三,萬法歸宗! 

關於Spring Boot這塊,其實裏面涉及的內容很是多也很是靈活,散仙的項目中用到的模塊也只是冰山一角,不可能徹底覆蓋全部有關的模塊,徹底是爲了項目而用技術,不是爲了技術而誕生了這個項目,因此此次記錄的心得,徹底是項目有關的,而不是Spring Boot一個學習教程,這一點,但願各位看官明白,若是想專攻學習Spring Boot,推薦點擊官網更詳細的教程 
一個項目是由多種不一樣層面的技術組成的,因此散仙不會只寫有關Spring Boot方面的,雖然Spring Boot是主線。大多數狀況下,都會集成多種不一樣的技術,只有各自發揮本身擅長的優點,才能組合出最優的架構。 

好了,多說了點廢話,下面看下本篇記錄Spring Boot的幾個知識點: 

(一)一個Maven+Spring Boot項目基本的包結構形式 
(二)一個簡單的在Spring Boot項目集成安全控制 
(二)如何在Spring Boot中記錄log日誌 
(四)Spring Boot中幾個經常使用註解介紹 

ok下面開始正題: 

(一)先看下,官網給出的一個簡單的包結構組成: 

html

Java代碼    收藏代碼
  1. com  
  2.  +- example  
  3.      +- myproject  
  4.          +- Application.java  
  5.          |  
  6.          +- domain  
  7.          |   +- Customer.java  
  8.          |   +- CustomerRepository.java  
  9.          |  
  10.          +- service  
  11.          |   +- CustomerService.java  
  12.          |  
  13.          +- web  
  14.              +- CustomerController.java  



而後,看下散仙實際工做中的項目結構: 



   


須要注意的地方以下: 
1,在src/main/java包下的第一層結構中,是必須放一個含有main方法的主啓動的類,並且只能有一個main方法,若是再出現其餘的main方法,在使用maven編譯打包時,會報編譯錯誤,固然在src/test/java包下,能夠出現多個,但建議最好使用Junit進行單元測試. 

這個main方法啓動,就會啓動內嵌的tomcat或jetty容器,而後加載全部須要加載的或掃描的類或資源文件。上篇博客中,散仙爲了測試方便,是直接在當前的Conroller中,啓動了一個測試服務,這樣作適合單獨調試,若是是生產環境下的啓動方法,則是散仙前面所講的,在java包的根目錄下創建一個main方法類,負責啓動全部的資源。 

在本例中,散仙的main代碼以下: 

java

Java代碼    收藏代碼
  1. package com.dhgate.rate;  
  2.   
  3. import org.springframework.boot.SpringApplication;  
  4. import org.springframework.boot.autoconfigure.EnableAutoConfiguration;  
  5. import org.springframework.context.annotation.ComponentScan;  
  6. import org.springframework.context.annotation.Configuration;  
  7.   
  8. @Configuration//配置控制  
  9. @EnableAutoConfiguration//啓用自動配置  
  10. @ComponentScan//組件掃描  
  11. public class ApplicationMain {  
  12.     public static void main(String[] args) throws Exception {  
  13.         //啓動Spring Boot項目的惟一入口  
  14.         SpringApplication.run(ApplicationMain.class, args);  
  15.   
  16.     }  
  17.   
  18. }  




2,在src/main/resource目錄下面,是放置一些配置文件,或模板支持的文件,如JSP,Velocity,Freemaker等,這裏面比較經常使用或重要的一個文件,就是Spring Boot的集中式配置文件application.properties這個文件了,這裏面給其餘大部分的組件,提供了一個可集中管理和配置的中心,包括安全控制,redis,solr,mangodb的鏈接信息,以及數據庫鏈接池,容器端口號,jmx,java mail,動態模板等。此外這個目錄下默認是能夠訪問靜態資源的,好比咱們的css,js,或者第三方的一些引用文件等。 

(二)關於在Spring Boot的配置簡單的安全訪問控制,這一點很是容器,咱們只須要作以下二步,便可。 
1,在pom文件中,引入spring-boot-starter-security的maven依賴。 

web

Xml代碼    收藏代碼
  1. <dependency>  
  2.         <groupId>org.springframework.boot</groupId>  
  3.         <artifactId>spring-boot-starter-security</artifactId>  
  4.     </dependency>  



2,在application.properties中,配置訪問的用戶名和密碼 

redis

Java代碼    收藏代碼
  1. #用戶名 密碼配置  
  2. security.user.name=admin  
  3. security.user.password=test  



再次,訪問連接時,會出現如下,攔截頁面,就表明配置成功: 


 


固然這只是,一個初級的配置,更復雜的配置,能夠分不用角色,在控制範圍上,可以攔截到方法級別的權限控制。 

(三)日誌的重要性,不言而喻,Spring Boot支持大部分的log配置,其中包括: 
(1)java util logging 
(2)log4j 
(3)log4j2 
(4)logbak 
默認的狀況下spring boot會選擇logback做爲日誌記錄的載體,固然要想它正常的工做,須要依賴 Commons Logging, Java Util Logging, Log4J 或 SLF4J,相信大部分同窗都是選擇使用log4j.properties做爲咱們的日誌配置和管理,可是散仙在Spring Boot中一直沒有測試集成成功,因此就放棄使用log4j.properties做爲日誌載體,而是選擇了Spring Boot推薦的logbak做爲日誌的配置文件,用過以後感受也不錯。 

使用步驟: 

1,將logbak.xml拷貝至resource目錄下的根目錄,而後在logbak.xml中,配置相關的log生成規則,log級別,以及日誌路徑,log的字符編碼集,這個很是重要,由於剛開始用這個log記錄程序運行的信息時,發現它不支持中文log,後來經查名,須要配置相關的log編碼才能夠正確記錄對應的信息。一個通用的配置以下: 

spring

Xml代碼    收藏代碼
  1. <!-- Logback configuration. See http://logback.qos.ch/manual/index.html -->  
  2. <configuration scan="true" scanPeriod="10 seconds">  
  3.     
  4.   <!-- Simple file output -->  
  5.   <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">  
  6.     <!-- encoder defaults to ch.qos.logback.classic.encoder.PatternLayoutEncoder -->  
  7.     <encoder>  
  8.         <pattern>  
  9.             [ %-5level] [%date{yyyy-MM-dd HH:mm:ss}] %logger{96} [%line] - %msg%n  
  10.         </pattern>  
  11.         <charset>UTF-8</charset> <!-- 此處設置字符集 -->  
  12.     </encoder>  
  13.   
  14.     <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">  
  15.       <!-- rollover daily 配置日誌所生成的目錄以及生成文件名的規則 -->  
  16.       <fileNamePattern>logs/mylog-%d{yyyy-MM-dd}.%i.log</fileNamePattern>  
  17.       <timeBasedFileNamingAndTriggeringPolicy  
  18.           class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">  
  19.         <!-- or whenever the file size reaches 64 MB -->  
  20.         <maxFileSize>64 MB</maxFileSize>  
  21.       </timeBasedFileNamingAndTriggeringPolicy>  
  22.     </rollingPolicy>  
  23.   
  24.   
  25.     <filter class="ch.qos.logback.classic.filter.ThresholdFilter">  
  26.       <level>DEBUG</level>  
  27.     </filter>  
  28.     <!-- Safely log to the same file from multiple JVMs. Degrades performance! -->  
  29.     <prudent>true</prudent>  
  30.   </appender>  
  31.   
  32.   
  33.   <!-- Console output -->  
  34.   <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">  
  35.     <!-- encoder defaults to ch.qos.logback.classic.encoder.PatternLayoutEncoder -->  
  36.       <encoder>  
  37.           <pattern>  
  38.               [ %-5level] [%date{yyyy-MM-dd HH:mm:ss}] %logger{96} [%line] - %msg%n  
  39.           </pattern>  
  40.           <charset>GBK</charset> <!-- 此處設置字符集 -->  
  41.       </encoder>  
  42.     <!-- Only log level WARN and above -->  
  43.     <filter class="ch.qos.logback.classic.filter.ThresholdFilter">  
  44.       <level>WARN</level>  
  45.     </filter>  
  46.   </appender>  
  47.   
  48.   
  49.   <!-- Enable FILE and STDOUT appenders for all log messages.  
  50.        By default, only log at level INFO and above. -->  
  51.   <root level="INFO">  
  52.     <appender-ref ref="FILE" />  
  53.     <appender-ref ref="STDOUT" />  
  54.   </root>  
  55.   
  56.   <!-- For loggers in the these namespaces, log at all levels. -->  
  57.   <logger name="pedestal" level="ALL" />  
  58.   <logger name="hammock-cafe" level="ALL" />  
  59.   <logger name="user" level="ALL" />  
  60. </configuration>  




2,在application.properties中,指定log文件的加載路徑,已經配置通用的log日誌級別: 

數據庫

Java代碼    收藏代碼
  1. #指定log的配置文件,以及記錄Spring Boot的log級別  
  2. logging.config=logback.xml  
  3. logging.level.org.springframework.web: INFO  





(四)介紹下Spring Boot中幾個經常使用的註解,其中大部分都是來自Spring MVC的註解,這些註解使用的頻率通常都在90%之上。 

(1)@RestController和@Controller指定一個類,做爲控制器的註解 
(2)@RequestMapping方法級別的映射註解,這一個用過Spring MVC的小夥伴相信都很熟悉 
(3)@EnableAutoConfiguration和@SpringBootApplication是類級別的註解,根據maven依賴的jar來自動猜想完成正確的spring的對應配置,只要引入了spring-boot-starter-web的依賴,默認會自動配置Spring MVC和tomcat容器 
(4)@Configuration類級別的註解,通常這個註解,咱們用來標識main方法所在的類 
(5)@ComponentScan類級別的註解,自動掃描加載全部的Spring組件包括Bean注入,通常用在main方法所在的類上 
(6)@ImportResource類級別註解,當咱們必須使用一個xml的配置時,使用@ImportResource和@Configuration來標識這個文件資源的類。 
(7)@Autowired註解,通常結合@ComponentScan註解,來自動注入一個Service或Dao級別的Bean 
(8)@Component類級別註解,用來標識一個組件,好比我自定了一個filter,則須要此註解標識以後,Spring Boot纔會正確識別。 



ok,本篇的講解,就到此結束,這些都是項目工程的基礎知識,瞭解這些,有助於咱們快速的上手一個Spring Boot應用。 

下篇博客的內容會寫: 
(1)如何在Spring Boot項目中集成Spring Loaded框架,來完成模塊熱加載和代碼動態編譯,有了這個東西,咱們開發的效率會更加高效,大部分狀況下咱們改了一個類或方法的代碼以後,都不須要重啓應用,由於Spring Loaded會定時從新編譯並加載代碼。 

(2)如何在Spring Boot項目中集成Velocity,Spring Boot支持多種模板引擎,包括 
1,FreeMarker 
2,Groovy 
3,Thymeleaf 
4,Velocity 
5,JSP (Spring Boot官方不推薦) 
咱們能夠根據熟悉程度來選擇本身喜歡的引擎。 編程

相關文章
相關標籤/搜索