Spring Boot進階系列一

筆者最近在總結一個 Spring Boot實戰系列,以方便未來查找和公司內部培訓用途。css

1.Springboot從哪裏來

SpringBoot是由Pivotal團隊在2013年開始研發、2014年4月發佈第一個版本的全新開源的輕量級框架。它基於Spring4.0設計,不只繼承了Spring框架原有的優秀特性,並且還經過簡化配置來進一步簡化了Spring應用的整個搭建和開發過程。另外SpringBoot經過集成大量的框架使得依賴包的版本衝突,以及引用的不穩定性等問題獲得了很好的解決。html

 

其主要的優點以下:前端

  •   建立獨立的Spring Web應用程序
  •   嵌入的Tomcat,Jetty或者Undertow,無須部署WAR文件就能夠直接運行。
  •   簡化Maven或Gradle配置
  •   自動配置Spring
  •   開箱即用,沒有代碼生成,也無需XML配置. 經過在MAVEN項目的pom.xml文件中添加相關依賴包,而後使用對應註解來代替繁瑣的XML配置文件以管理對象的生命週期.
  •   約定優於配置(Convention over configuration) 是一種由SpringBoot自己來配置目標結構,由開發者在結構中添加信息的軟件設計範式. 減小了開發人員須要作出決定的數量,同時減小了大量的XML配置,而且能夠將代碼編譯、測試和打包等工做自動化。

 

Springboot官網目前推薦的版本是2.1.7. 若是是剛開始使用Springboot,那麼從2.X開始無疑是最好的選擇。java

當下大多數公司的生產環境的版本應該是1.X系列。官方最後的1.X版本落在1.5.22.mysql

https://spring.io/blog/2019/08/06/it-is-time-goodbye-spring-boot-1-xweb

 

2.開發環境

  •   Eclipse Java EE IDE for Web Developers.Version: 2018-09 (4.9.0)
  •   Java version: 1.8.0_192
  •   apache-maven-3.6.0
  •   apache-tomcat-9.0.12
  •   MySQL Server 8.0.17.0 + MySQL Workbench 8.0 CE

 

3.Springboot項目結構

Eclipse裏面新建項目,選擇Spring Starter Project模板,經過嚮導點擊下一步,項目命名爲ProductApp0最後選擇2.1.7版本。spring

resources文件夾裏面建立static,templates,public/error的文件夾。sql

application.properties:自動生成,用於配置項目運行所需的配置數據。數據庫

static:用於存放靜態資源,裏面繼續建立子文件夾js,css,image
public/error: 用於存放相似404.html,5xx.html等文件apache

templates:用於存放模板文件,使用官方推薦的Thymeleaf

demo下面建立該項目用到的幾個文件夾,config,store,model,controller

項目文件夾分佈架構大體以下:

該項目具備三個功能,分別向前端返回一個字符串,一個對象,以及一個集合。

 

4.項目分析

4.1 Pom.xml裏面主要添加的包是web, jdbc,jpa, mysql driver,fastjson.結構以下:

     <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- jdbc -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!-- springboot,jpa 整合包 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <!-- mysql 驅動包 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <!--根據MySQL server 版本實際狀況變更 -->
            <version>8.0.17</version><!--$NO-MVN-MAN-VER$ -->
        </dependency>
        <!-- 引入FastJSON -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.35</version>
        </dependency>

4.2 該示例須要用到一張表,結構以下:

CREATE TABLE `book` ( `Id` int(11) NOT NULL AUTO_INCREMENT, `Name` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `Category` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL, `Price` decimal(18,2) NOT NULL, `Publish_Date` date NOT NULL, `Poster` varchar(45) NOT NULL, PRIMARY KEY (`Id`) ) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8

4.3 使用Spring-data-jpa訪問數據庫,分別在model,store文件夾裏面裏面建立Book 類,BookRepository接口。

@Entity public class Book implements Serializable { private static final long serialVersionUID = -3123479062966697145L; @Id @Column private Integer id; @Column private String name; @Column private String category; @Column private Double price; @Column @JSONField(format="yyyy-MM-dd") private Date publish_date; @Column private String poster; } //省略getter,setter方法

public interface BookRepository extends JpaRepository<Book,Integer> { }

4.4. 引入fastjson,須要添加一個配置類

@Configuration public class JSONWebConfig { @Bean public HttpMessageConverters fastJsonHttpMessageConverters() { FastJsonHttpMessageConverter fastJsonHttpMessageConverter = new FastJsonHttpMessageConverter(); FastJsonConfig fastJsonConfig = new FastJsonConfig(); fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat); fastJsonHttpMessageConverter.setFastJsonConfig(fastJsonConfig); HttpMessageConverter<?> converter = fastJsonHttpMessageConverter; return new HttpMessageConverters(converter); } }

4.5 在controller文件夾裏面建立HelloController class以下,

@RestController @RequestMapping("/hello") public class HelloController { @Autowired private BookRepository bookRepository; @GetMapping("/test") public String test() { return "My first springboot web application!"; } @GetMapping("/findOne") public Book findOne() throws NotFoundException { int id=1; Optional<Book> book = this.bookRepository.findById(id); if(book.isPresent()) { return book.get(); } else { throw new NotFoundException("Not found..."); } } @GetMapping("/findAll") public List<Book> findAll() { List<Book> books = this.bookRepository.findAll(); return books; } }

說明:

  • @Autowired:自動導入依賴的bean.
  • @Configuration:至關於xml配置文件
  • @Bean:用@Bean標註方法等價於XML中配置的bean。
  • @Entity:@Table(name=」「):代表這是一個實體類, 通常用於JPA。這兩個註解通常一塊使用,可是若是表名和實體類名相同的話,@Table能夠省略
  • @Controller:用於定義控制器類,在spring項目中由控制器負責將用戶發來的URL請求轉發到對應的服務接口(service層),註解在類上面,方法須要配合註解@RequestMapping
  • @RestController註解是@Controller和@ResponseBody的合集,表示這是個控制器bean,而且是將函數的返回值直接填入HTTP響應體中,是REST風格的控制器。
  • @RequestMapping:提供路由信息,負責URL到Controller中的具體函數的映射, 返回值一般解析爲跳轉路徑
  • @ResponseBody:表示該方法的返回結果直接寫入HTTP response body中,通常在異步獲取數據時使用,用於構建RESTful的WEB API。好比異步獲取json數據,加上@Responsebody後,會直接返回json數據。該註解通常會配合@RequestMapping使用。
  • @GetMapping 組合註解,是@RequestMapping(method = RequestMethod.GET)的縮寫

 

4.6 application.properties文件內容以下:

 

# DB connection configuration spring.datasource.url=jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC spring.datasource.username=*** spring.datasource.password=****** # JPA configuration spring.jpa.hibernate.ddl-auto=update spring.jpa.show-sql=true

 

 

4.7 程序入口點在main函數

@SpringBootApplication public class ProductApp0Application { public static void main(String[] args) { SpringApplication.run(ProductApp0Application.class, args); } }

@SpringBootApplication是Spring Boot的核心註解,是一個組合註解,用於啓動類上。包含了@ComponentScan、@Configuration和@EnableAutoConfiguration註解。其中@ComponentScan讓spring Boot掃描到Configuration類並把它加入到程序上下文。

 

選中項目,右鍵選擇Debug AsRun As菜單,先點擊Maven clean,後點擊Maven install

編譯無錯誤後,點擊Spring Boot App運行項目。

瀏覽器輸入如下地址,查看結果。

http://localhost:8080/hello/test

http://localhost:8080/hello/findOne

http://localhost:8080/hello/findAll

 

5.打包部署

5.1通常來講打成jar或者war包,eclipse默認生成jar包。在項目裏面的target文件夾裏面。 運行程序則用下面的命令,

java -jar ProductApp0-0.0.1-SNAPSHOT.jar

 

5.2.1 SpringbootApplication 類繼承 SpringBootServletInitializer 並重寫 configure 方法,以下:

@SpringBootApplication public class ProductApp0Application extends SpringBootServletInitializer { @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(ProductApp0Application.class); } public static void main(String[] args) { SpringApplication.run(ProductApp0Application.class, args); } }

5.2.2 在pom.xml裏面添加一行,跟在<description>標籤後面,

 <groupId>com.example</groupId>
    <artifactId>ProductApp0</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>ProductApp0</name>
    <description>Demo project for Spring Boot</description>
    <packaging>war</packaging>

Eclipse裏面點擊Maven clean, Maven install,最終在target文件夾裏面生成以下:

複製 war包到tomcat/webapps文件夾,建議重名爲home.war. 而後啓動tomcat/bin文件夾裏面的startup.bat

瀏覽器裏面輸入以下地址,查看結果

http://localhost:8080/home/hello/test

http://localhost:8080/home/hello/findOne

http://localhost:8080/home/hello/findAll

相關文章
相關標籤/搜索