一、web開發
spring boot web開發很簡單,包括json輸出,filter,log,properties等
json接口開發
使用spring開發項目時,
spring boot中使用@RestController標註類,便可以使類中的方法返回json格式的數據
@RequestMapping("/getUser")
public Map<String, Object> getUser(){
Map<String, Object> map = new HashMap<>();
map.put("username", "張三");
map.put("password", "123456");
return map;
}
自定義filter
Spring Boot默認實現了OrderedCharacterEncodingFilter 和 HiddenHttpMethodFilter,如果需要使用自定義的Filter,步驟如下:
- 實現Filter接口,重寫接口中的方法
- 添加@Configuration 註解,將自定義Filter加入過濾鏈
@Configuration
public class WebFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("容器初始化!");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) servletRequest;
System.out.println("請求地址是:" + req.getRequestURI());
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
System.out.println("容器銷燬!");
}
}
自定義property
在spring boot中,如果需要使用自定義的property的文件,則需要在類路徑下創建application.properties配置文件,然後添加自己的配置,配置文件如下:
com.lt.username=黃三
com.lt.usercode=1234
實體類如下:
@Component
public class User {
@Value("${com.lt.username}")
private String username;
@Value("${com.lt.usercode}")
private String usercode;
public String getUsername() {
return username;
}
public String getUsercode() {
return usercode;
}
public void setUsername(String username) {
this.username = username;
}
public void setUsercode(String usercode) {
this.usercode = usercode;
}
}
controller如下:
@RestController
public class HelloWorld {
@Autowired
private User user;
@RequestMapping("/getInfo")
public User getInfo(){
return user;
}
}
YAML
一個以數據爲中心的數據描述語言,在spring boot中可以用作配置文件,來簡化配置文件的書寫;具體可以參考:YAML快速入門
log配置
spring boot中默認集成了LogBack,無需其他配置,就會將日誌打印到控制檯;但如果需要將日誌輸出到硬盤上的日誌文件中時,則需要在application.properties中進行配置,配置如下:
#表示將日誌輸出至D盤log文件下
logging.path=D:/log
logging.level.com.favorites=DEBUG
logging.level.org.springframework.web=INFO
logging.level.org.hibernate=ERROR
配置文件中參數說明
- logging.path:日誌文件的路徑
- logging.file:日誌文件的名稱,默認爲spring.log
- logging.level:日誌文件的級別,日誌級別總共有TARCE < DEBUG < INFO < WARN < ERROR < FATAL ,且級別是逐漸提供,如果日誌級別設置爲INFO,則意味TRACE和DEBUG級別的日誌都看不到;上例中我們打印了一個INFO級別的日誌,因爲Spring Boot默認級別就是INFO,如果我們改爲WARN,項目啓動時,幾乎就不會打印日誌了;
具體可以參考Spring Boot系列——日誌配置
在程序中需要創建Logger對象,我使用的是sl4j
@RestController
public class HelloWorld {
private final static Logger log = LoggerFactory.getLogger(HelloWorld.class);
@RequestMapping("/log")
public void log(){
log.info("spring boot 日誌");
}
}
二、數據庫操作
1. 引入依賴
<!--Boot集成JPA-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
2. 配置數據源
在application.yml中配置
spring:
#配置數據源信息
datasource:
url: jdbc:mysql://localhost:3306/learner?serverTimezone=UTC&useSSL=false
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
#配置JPA
jpa:
hibernate:
ddl-auto: update
show-sql: true
3. 創建實體類
@Entity
public class User {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
private String username;
private String password;
//get和set省略
}
4. 創建dao
public interface UserDao extends JpaRepository<User, Integer> {}
4. 創建測試類
@RunWith(SpringRunner.class)
@SpringBootTest
public class JPATest {
@Autowired
private UserDao userDao;
@Test
public void testSave() throws Exception {
User user = new User();
user.setUsername("張翔");
user.setPassword("124");
userDao.save(user);
}
}
碰到的問題
【1】報錯:Loading class `com.mysql.jdbc.Driver’. This is deprecated.
由於mysql的版本是8,所以和之前的版本有區別:首先驅動換了,不是com.mysql.jdbc.Driver而是’com.mysql.cj.jdbc.Driver’;此外mysql8.0是不需要建立ssl連接的,需要顯示關閉;最後需要設置時區,即:
spring:
#配置數據源信息
datasource:
url: jdbc:mysql://localhost:3306/learner?serverTimezone=UTC&useSSL=false
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 123456
【2】JPA常見的註解:JPA基本註解
【3】Spring Data Jpa
Spring Data Jpa 還有很多功能,比如封裝好的分頁,可以自己定義SQL,主從分離等等,可以參考:Spring Data JPA、Spring Boot整理——Spring Data JPA、使用 Spring Data JPA 簡化 JPA 開發
三、Thymeleaf 模板
Thymeleaf 是一款用於渲染 XML/XHTML/HTML5 內容的模板引擎。類似 JSP,Velocity,FreeMaker 等,它也可以輕易的與 Spring MVC 等 Web 框架進行集成作爲 Web 應用的模板引擎。與其它模板引擎相比,Thymeleaf 最大的特點是能夠直接在瀏覽器中打開並正確顯示模板頁面,而不需要啓動整個 Web 應用;說了這麼多,其實還是推薦前後分離,使用新的vue等前端框架
四、spring boot整合freemarker
1. 添加pom依賴
<!--引入freeMarker的依賴包-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>
2. 配置freemarker
- 新建application.properties文件
########################################################
###FREEMARKER (FreeMarkerAutoConfiguration)
########################################################
spring.freemarker.allow-request-override=false
spring.freemarker.cache=true
spring.freemarker.check-template-location=true
spring.freemarker.charset=UTF-8
spring.freemarker.content-type=text/html
spring.freemarker.expose-request-attributes=false
spring.freemarker.expose-session-attributes=false
spring.freemarker.expose-spring-macro-helpers=false
#spring.freemarker.prefix=
#spring.freemarker.request-context-attribute=
#spring.freemarker.settings.*=
spring.freemarker.suffix=.ftl
spring.freemarker.template-loader-path=classpath:/templates/
#comma-separated list
#spring.freemarker.view-names= # whitelist of view names that can be resolved
3. 在templates下創建index.ftl模板文件
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8" />
<title></title>
</head>
<body>
${msg}
</body>
</html>
4.創建controller文件
package com.lt.springboot.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import java.util.Map;
/**
* @ClassName Index
* @Description TODO
* @Author lt
* @Date 2019-04-05
**/
@Controller
public class Index {
@RequestMapping("/index")
public String index(Map<String, Object> param){
param.put("msg", "spring boot整合freemarker");
return "index";
}
}
五、Gradle 構建工具
Spring 項目建議使用 Maven/Gradle 進行構建項目,相比 Maven 來講 Gradle 更簡潔,而且 Gradle 更適合大型複雜項目的構建
六、WebJars
1. 什麼是WebJars
WebJars 是將客戶端(瀏覽器)資源(JavaScript,Css等)打成 Jar 包文件,以對資源進行統一依賴管理。WebJars 的 Jar 包部署在 Maven 中央倉庫上
2. 爲什麼要使用WebJars
我們在開發 Java web 項目的時候會使用像 Maven,Gradle 等構建工具以實現對 Jar 包版本依賴管理,以及項目的自動化管理,但是對於 JavaScript,Css 等前端資源包,我們只能採用拷貝到 webapp 下的方式,這樣做就無法對這些資源進行依賴管理。那麼 WebJars 就提供給我們這些前端資源的 Jar 包形勢,我們就可以進行依賴管理
3. 如何使用
- WebJars官網查找對於的組件,比如 jQuery
<dependency>
<groupId>org.webjars</groupId>
<artifactId>jquery</artifactId>
<version>3.4.1</version>
</dependency>
- 頁面引入
<script src="/webjars/jquery/3.4.1/jquery.min.js"></script>