首页 > 技术文章 > spring boot

cyx-garen 2018-05-11 17:52 原文

Spring Boot

特性

         Spring Boot四大核心:    (每个特性都是为了简化Spring)

  1. 自动配置:        
  2. 起步依赖:        
  3. 命令行界面:
  4. Actuator  

简而言之,Spring Boot就是Spring,他做了那些没有他也会去写的Spring Bean配置.

 

项目目录

  1. Build.gradle||pom.xml
    Gradle构建说明文件   若是使用Maven则为pom.xml(Project object model)
  2. Src/main/java/xxxxApplication.java
    程序的启动引导类 主要的Spring配置类    @SpringBootApplication(开启组件扫描和自动配置) @SpringBootApplication=(@Configuration + @CompanentScan + @EnableAutoConfiguration)
  3. Src/main/resources/application.properties
    配置应用程序和Spring Boot的属性
  4. Application与其他层的包属于同一级别

     

 

 

 

步骤

  1. 定义领域模型(定义实体 @Entity)
  2. 定义仓库接口,实现(@Repository,继承了Jpa的接口不需要使用标注?)
  3. 定义业务接口,实现(@Service)
  4. Web前端(@Controller)

 

 

@Entity

@Repository

  1. JpaRepository有两个参数:仓库操作的领域类型(Entity),与Id的类型

public interface Test extends JpaRepository<Entity,Long>(){

List<Entity> findById(Long id);

}

 

@Service

@Controller

  1. @Controller 返回视图名,在templates中寻找html

@ControllerRest返回json

 

  1. @Controller

(@Autowired Repository)

@RequestMapping(value = “/{test}” , method = RequestMethod.GET)

public String func(@PathVariable(“test”) String test , Model model){

                   //@PathVariable      使用Mapping中{}中的值并给参数赋值

         List<Entity> list = repository,findById(test);

         model.addAttribute(“test”,list);

                  //将list装入模型,键为test

         return “testView”;

                   //返回的testView为视图的逻辑名称,即在templates中找html

}

 

 

 

配置

application.properties  或者 创建 application.yml

properties

         spring.datasource.first.username = xxxx

 

yml规范

         spring:

                   datasource:

                            first:

                                     username:

                                     url:

添加依赖

maven xxxx   然后写入pom         <dependcy>

 

配置数据源

 

 

// MySQL的JDBC URL编写方式:jdbc:mysql://主机名称:连接端口/数据库的名称?参数=值

spring:
  datasource:
    username: root
    password: 
    url: jdbc:mysql:
    dirver-class-name: com.mysql.jdbc.Driver
    type: com.zaxxer.hikari.HikariDataSource

 

<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-commons</artifactId>
            <version>2.0.6.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>5.0.6.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>2.0.7.RELEASE</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>5.0.6.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
            <version>5.1.30</version>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>servlet-api</artifactId>
            <version>2.5</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

 

配置错误页

         查找error的视图,找不到就用”白标”代替,(自定义error.html)

 

 

测试

@SpringBootTest

         在使用springboot进行单元测试时

 

         @RunWith(SpringRunner.class)

         @SpringBootTest

 

         在测试中使用assertEquals 进行断言 

 

MVC测试

         import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; àget/post

         import     static  org.springframework.test.erb.servlet.result.MockMvcResultMatchers.*;

àstatus()/view()/model()

 

设置Mock MVC 有以下两个静态方法

         standaloneSetuo()

         webAppContextSetup()

        

 

        

         @RunWith(SpringRunner.class)

         @SpringBootTest

         public class xxxTest(){

 

         @Autowired

  private WebApplicationContext web;               à注入web

        

         private MockMvc mock;

 

         @Before

         public void setupMock(){

                   mock = MockMvcBuilders                                    à设置mock

        .webAppContextSetup(web)

       //  .apply(springSecurity())              设置安全测试模块(非必须)

        .build();   

              }       

        

spring  mvc模拟

         @Test

         public void postBook() throws Exception{

                   mock.perform(post(“/read”))                             à模拟提交表单

                            .contentType(MediaType.APPLICATION_FORM_URLENCODED)             à该类型是浏览器会发送的类型

                            .param(“title”,”book”)                                 à设置表单内容

                            .param(…)

                            .andExpect(status().is3xxRedirection);   à检查是否是重定向

        

                   mock.perform(get(“/book”))                               à模拟获取信息

                            .andExpect(status.isOK())

                            .andExpect(view().name(“book”))

                            .andExpect(model().attributeExists(“books”))

                            .andExpect(model().attribute(“books”,hasSize(1)))

                            .andExpect(model().attribute(“books”,contains(samePropertyValuesAs(this.book)))) à判断是否和设置的集合集数据是否一致

 

web安全测试

         开启安全测试后,请求主页时,不能只期待返回200,若是未经过身份验证,则重定向到登录界面

         身份验证的请求:

  1. @WithMockUser:加载安全上下文,包含一个UserDetails,使用了给定的用户名,密码,授权

                            @Test

                            @WithMockUser(username=”chen”

          password=”pass”

          roles=”READER”)

  1. @WithUserDetails:根据给定的用户名查找UserDetail对象,加载安全上下文

        @Test

        @WithUserDetail(“chen”)

        public void test() throws Exception{

                  Reader reader = new Reader();                          à配置期望的reader

                reader.setUsername(“chen”);

                  reader.setPassword(“pass”);

        

测试运行中的应用程序

         @WebIntegertionTest

         声明不仅希望Spring Boot为测试创建应用程序上下文,还要启动一个servlet容器.一但结果运行在容器中,就可以发动真实http请求,断言结果

Grails

GORM

Grails object Relational Mapping   Grails对象关系映射

 

import grails.persistence.*

 

@Entity

Class Book{

         Reader reader

         String isbn

         String title

}

         没有分号,没有修饰符,setter\getter方法,

  Grails的@Entity注解使该类变为GORM实体

         GORM要求实体类必须为Groovy来写

推荐阅读