原文連接java
上篇文章介紹了Spring boot初級教程: spring boot(一):入門篇 ,方便你們快速入門、瞭解實踐Spring boot特性;本篇文章接着上篇內容繼續爲你們介紹spring boot的其它特性(有些未必是spring boot體系桟的功能,可是是spring特別推薦的一些開源技術本文也會介紹),對了這裏只是一個大概的介紹,特別詳細的使用咱們會在其它的文章中來展開說明。mysql
web開發
spring boot web開發很是的簡單,其中包括經常使用的json輸出、filters、property、log等web
json 接口開發
在之前的spring 開發的時候須要咱們提供json接口的時候須要作那些配置呢
1. 添加 jackjson 等相關jar包
2. 配置spring controller掃描
3. 對接的方法添加@ResponseBodyspring
就這樣咱們會常常因爲配置錯誤,致使406錯誤等等,spring boot如何作呢,只須要類添加 @RestController 便可,默認類中的方法都會以json的格式返回sql
@RestController public class HelloWorldController { @RequestMapping("/getUser") public User getUser() { User user=new User(); user.setUserName("小明"); user.setPassWord("xxxx"); return user; } }
若是咱們須要使用頁面開發只要使用 @Controller ,下面會結合模板來講明數據庫
自定義Filter
咱們經常在項目中會使用filters用於錄調用日誌、排除有XSS威脅的字符、執行權限驗證等等。Spring Boot自動添加了OrderedCharacterEncodingFilter和HiddenHttpMethodFilter,而且咱們能夠自定義Filter。
兩個步驟:
1. 實現Filter接口,實現Filter方法
2. 添加 @Configurationz 註解,將自定義Filter加入過濾鏈json
好吧,直接上代碼服務器
@Configuration public class WebConfiguration { @Bean public RemoteIpFilter remoteIpFilter() { return new RemoteIpFilter(); } @Bean public FilterRegistrationBean testFilterRegistration() { FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(new MyFilter()); registration.addUrlPatterns("/*"); registration.addInitParameter("paramName", "paramValue"); registration.setName("MyFilter"); registration.setOrder(1); return registration; } public class MyFilter implements Filter { @Override public void destroy() { // TODO Auto-generated method stub } @Override public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain filterChain) throws IOException, ServletException { // TODO Auto-generated method stub HttpServletRequest request = (HttpServletRequest) srequest; System.out.println("this is MyFilter,url :"+request.getRequestURI()); filterChain.doFilter(srequest, sresponse); } @Override public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub } } }
自定義Property
在web開發的過程當中,我常常須要自定義一些配置文件,如何使用呢session
配置在application.properties中
com.neo.title=純潔的微笑 com.neo.description=分享生活和技術
自定義配置類app
@Component public class NeoProperties { @Value("${com.neo.title}") private String title; @Value("${com.neo.description}") private String description; //省略getter settet方法 }
log配置
配置輸出的地址和輸出級別
logging.path=/user/local/log logging.level.com.favorites=DEBUG logging.level.org.springframework.web=INFO logging.level.org.hibernate=ERROR
path爲本機的log地址, logging.level 後面能夠根據包路徑配置不一樣資源的log級別
數據庫操做
在這裏我重點講述mysql、spring data jpa的使用,其中mysql 就不用說了你們很熟悉,jpa是利用Hibernate生成各類自動化的sql,若是隻是簡單的增刪改查,基本上不用手寫了,spring內部已經幫你們封裝實現了。
下面簡單介紹一下如何在spring boot中使用
一、添加相jar包
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> </dependency>
二、添加配置文件
spring.datasource.url=jdbc:mysql://localhost:3306/test spring.datasource.username=root spring.datasource.password=root spring.datasource.driver-class-name=com.mysql.jdbc.Driver spring.jpa.properties.hibernate.hbm2ddl.auto=update spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5InnoDBDialect spring.jpa.show-sql= true
其實這個hibernate.hbm2ddl.auto參數的做用主要用於:自動建立|更新|驗證數據庫表結構,有四個值:
1. create: 每次加載hibernate時都會刪除上一次的生成的表,而後根據你的model類再從新來生成新表,哪怕兩次沒有任何改變也要這樣執行,這就是致使數據庫表數據丟失的一個重要緣由。
2. create-drop :每次加載hibernate時根據model類生成表,可是sessionFactory一關閉,表就自動刪除。
3. update:最經常使用的屬性,第一次加載hibernate時根據model類會自動創建起表的結構(前提是先創建好數據庫),之後加載hibernate時根據 model類自動更新表結構,即便表結構改變了但表中的行仍然存在不會刪除之前的行。要注意的是當部署到服務器後,表結構是不會被立刻創建起來的,是要等 應用第一次運行起來後纔會。
4. validate :每次加載hibernate時,驗證建立數據庫表結構,只會和數據庫中的表進行比較,不會建立新表,可是會插入新值。
dialect 主要是指定生成表名的存儲引擎爲InneoDB
show-sql 是否打印出自動生產的SQL,方便調試的時候查看
三、添加實體類和Dao
@Entity public class User implements Serializable { private static final long serialVersionUID = 1L; @Id @GeneratedValue private Long id; @Column(nullable = false, unique = true) private String userName; @Column(nullable = false) private String passWord; @Column(nullable = false, unique = true) private String email; @Column(nullable = true, unique = true) private String nickName; @Column(nullable = false) private String regTime; //省略getter settet方法、構造方法 }
dao只要繼承JpaRepository類就能夠,幾乎能夠不用寫方法,還有一個特別有尿性的功能很是贊,就是能夠根據方法名來自動的生產SQL,好比 findByUserName 會自動生產一個以 userName 爲參數的查詢方法,好比 findAlll 自動會查詢表裏面的全部數據,好比自動分頁等等。。