http://my.oschina.net/u/1027043/blog/406558
上篇散仙寫了一個很簡單的入門級的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下面開始正題:
(一)先看下,官網給出的一個簡單的包結構組成:
- com
- +- example
- +- myproject
- +- Application.java
- |
- +- domain
- | +- Customer.java
- | +- CustomerRepository.java
- |
- +- service
- | +- CustomerService.java
- |
- +- web
- +- CustomerController.java
然后,看下散仙實際工作中的項目結構:
需要注意的地方如下:
1,在src/main/java包下的第一層結構中,是必須放一個含有main方法的主啟動的類,而且只能有一個main方法,如果再出現其他的main方法,在使用maven編譯打包時,會報編譯錯誤,當然在src/test/java包下,可以出現多個,但建議最好使用Junit進行單元測試.
這個main方法啟動,就會啟動內嵌的tomcat或jetty容器,然后加載所有需要加載的或掃描的類或資源文件。上篇博客中,散仙為了測試方便,是直接在當前的Conroller中,啟動了一個測試服務,這樣做適合單獨調試,如果是生產環境下的啟動方法,則是散仙前面所講的,在java包的根目錄下建立一個main方法類,負責啟動所有的資源。
在本例中,散仙的main代碼如下:
- package com.dhgate.rate;
- import org.springframework.boot.SpringApplication;
- import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
- import org.springframework.context.annotation.ComponentScan;
- import org.springframework.context.annotation.Configuration;
- @Configuration//配置控制
- @EnableAutoConfiguration//啟用自動配置
- @ComponentScan//組件掃描
- public class ApplicationMain {
- public static void main(String[] args) throws Exception {
- //啟動Spring Boot項目的唯一入口
- SpringApplication.run(ApplicationMain.class, args);
- }
- }
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依賴。
- <dependency>
- <groupId>org.springframework.boot</groupId>
- <artifactId>spring-boot-starter-security</artifactId>
- </dependency>
2,在application.properties中,配置訪問的用戶名和密碼
再次,訪問鏈接時,會出現以下,攔截頁面,就代表配置成功:
當然這只是,一個初級的配置,更復雜的配置,可以分不用角色,在控制范圍上,能夠攔截到方法級別的權限控制。
(三)日志的重要性,不言而喻,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編碼才可以正確記錄對應的信息。一個通用的配置如下:
- <!-- Logback configuration. See http://logback.qos.ch/manual/index.html -->
- <configuration scan="true" scanPeriod="10 seconds">
- <!-- Simple file output -->
- <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
- <!-- encoder defaults to ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
- <encoder>
- <pattern>
- [ %-5level] [%date{yyyy-MM-dd HH:mm:ss}] %logger{96} [%line] - %msg%n
- </pattern>
- <charset>UTF-8</charset> <!-- 此處設置字符集 -->
- </encoder>
- <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
- <!-- rollover daily 配置日志所生成的目錄以及生成文件名的規則 -->
- <fileNamePattern>logs/mylog-%d{yyyy-MM-dd}.%i.log</fileNamePattern>
- <timeBasedFileNamingAndTriggeringPolicy
- class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
- <!-- or whenever the file size reaches 64 MB -->
- <maxFileSize>64 MB</maxFileSize>
- </timeBasedFileNamingAndTriggeringPolicy>
- </rollingPolicy>
- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
- <level>DEBUG</level>
- </filter>
- <!-- Safely log to the same file from multiple JVMs. Degrades performance! -->
- <prudent>true</prudent>
- </appender>
- <!-- Console output -->
- <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
- <!-- encoder defaults to ch.qos.logback.classic.encoder.PatternLayoutEncoder -->
- <encoder>
- <pattern>
- [ %-5level] [%date{yyyy-MM-dd HH:mm:ss}] %logger{96} [%line] - %msg%n
- </pattern>
- <charset>GBK</charset> <!-- 此處設置字符集 -->
- </encoder>
- <!-- Only log level WARN and above -->
- <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
- <level>WARN</level>
- </filter>
- </appender>
- <!-- Enable FILE and STDOUT appenders for all log messages.
- By default, only log at level INFO and above. -->
- <root level="INFO">
- <appender-ref ref="FILE" />
- <appender-ref ref="STDOUT" />
- </root>
- <!-- For loggers in the these namespaces, log at all levels. -->
- <logger name="pedestal" level="ALL" />
- <logger name="hammock-cafe" level="ALL" />
- <logger name="user" level="ALL" />
- </configuration>
2,在application.properties中,指定log文件的加載路徑,已經配置通用的log日志級別:
- #指定log的配置文件,以及記錄Spring Boot的log級別
- logging.config=logback.xml
- 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官方不推薦)
我們可以根據熟悉程度來選擇自己喜歡的引擎。

