Spring-boot(简介及在idea中的使用)

Spring-boot 简介

Spring Boot提供了一种新的编程范式,能在最小的阻力下开发Spring应用程序。有了它, 你可以更加敏捷地开发Spring应用程序,专注于应用程序的功能,不用在Spring的配置上多花功夫,甚至完全不用配置。以前配置都是复杂并且模板化,而在springboot中这些都自动为我们做好了,让开发人员更加专注于业务需求的开发。

优点:

  1.去除了大量的xml配置文件

  2.简化复杂的依赖管理

  3.配合各种starter使用,基本上可以做到自动化配置

  4.快速启动容器

  5. 配合Maven或Gradle等构件工具打成Jar包后,Java -jar 进行部署运行还是蛮简单的

   创建独立Spring应用程序,嵌入式Tomcat,Jetty容器,无需部署WAR包,简化Maven及Gradle配置,尽可能的自动化配置Spring,直接植入产品环境下的实用功能,比如度量指标、健康检查及扩展配置等,无需代码生成及XML配置。

缺点:

   1.从原来的xml配置方式转换到JAVA配置方式变化有点大,不太适应
   2.感觉Spring Boot 比较适合做微服务,不适合做比较大型的项目。

一 . 如何在idea中搭建一个简单的springboot

Spring-boot(简介及在idea中的使用)
Spring-boot(简介及在idea中的使用)
Spring-boot(简介及在idea中的使用)
Spring-boot(简介及在idea中的使用)
Spring-boot(简介及在idea中的使用)

二. 结构:

  • com.mr
    • controller(控制层负责页面访问级传值)
    • service/biz(负责业务逻辑)
    • pojo/domain(实体类)
    • utils(工具类,一些公共的类)
  • main/resources
    • static(目录存放web访问的静态资源,js,css,图片等)
    • templates(目录存放页面模板)
    • application.properties(项目的配置信息)
    • banner.txt(可替换项目启动时的图画)

三. pom.xml中依赖的jar

	//支持web模块
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
	//项目核心模块,包括自动配置支持,日志和YAML
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.1.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	//springboot 启动项目插件
	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

四. 启动方式:

1.spring-boot 中内嵌的tomcat

  • 问题: springboot中包结构没有在Application类同级而导致404找不到
  • 解决:需要在Application类上添加@ComponentScan(“扫描的位置包”)

Spring-boot(简介及在idea中的使用)

2.pom.xml 中依赖的插件

Spring-boot(简介及在idea中的使用)

五. 写一个简单的controller 测试

/**
 * Created by Administrator on 2019/1/11.
 *
 *  @RestController  代表返回的是json字符串 可以省略不写@ResponseBody
 * 也可以写springmvc 中 @Controller  在方法上仍然加上@ResponseBody
 */

@RestController
public class TestController {

    @RequestMapping("test1")
    /**
     *  @ResponseBody
     */
    public String test1(){
        return "success";
    }

    @RequestMapping("test2")
    public String test2(){
        return "error";
    }
}

六. 如何改变项目启动时的图画

1.创建banner.txt
Spring-boot(简介及在idea中的使用)
2.在文件中添加自己想要的效果
Spring-boot(简介及在idea中的使用)

七. application.properties 配置 (第一种)

  1. 修改访问项目的端口(tomcat端口号)
    server.port=8082 (端口号)
  2. 修改访问项目的路径
    server.servlet.context-path=/xf(自定义项目名)
  3. 修改编码
    server.tomcat.uri-encoding=UTF-8(编码格式)
  4. session 失效时间
    server.servlet.session.timeout=30(时间)
  5. 自定义配置

1) application.properties 中添加自定义的配置 Spring-boot(简介及在idea中的使用)
2)Controller 层
Spring-boot(简介及在idea中的使用)
3)页面显示
Spring-boot(简介及在idea中的使用)

application.yml (第二种)

注:springboot官方推荐使用这种文件,树状结构,层次感强,少写了很多代码,
在使用是 : 后必须跟一个空格,不然会认为是自动以配置,而不是文件本有的配置

Spring-boot(简介及在idea中的使用)

八. 数据验证

注: 在公司用到数据验证的, 一般都需要前后台验证两次
注:注解要对应相应的属性

1. springboot 注解验证参数

注解 作用类型 解释
@NotNull 任何类型 属性不能为null
@NotEmpty 集合 集合不能为null,且size大于0
@NotBlanck 字符串、字符 字符类不能为null,且去掉空格之后长度大于0
@AssertTrue Boolean、boolean 布尔属性必须是true
@Min 数字类型(原子和包装) 限定数字的最小值(整型)
@Max 同@Min 限定数字的最大值(整型)
@DecimalMin 同@Min 限定数字的最小值(字符串,可以是小数)
@DecimalMax 同@Min 限定数字的最大值(字符串,可以是小数)
@Range 数字类型(原子和包装) 限定数字范围(长整型)
@Length 字符串 限定字符串长度
@Size 集合 限定集合大小
@Past 时间、日期 必须是一个过去的时间或日期
@Future 时期、时间 必须是一个未来的时间或日期
@Email 字符串 必须是一个邮箱格式
@Pattern 字符串、字符 正则匹配字符串
  1. 简单验证效果
    1)创建一个实体类,添加相对应的注解
@Data
public class Student {
    @NotNull(message = "ID不能为空")
    private Integer stuId;
    @Max(value = 25,message = "不能超过25")
    @Min(value = 18,message = "不能小于18")
    private Integer stuAge;
    @NotEmpty(message = "用户名不能为空")
    private String stuName;
}

2)Controller层

@RequestMapping("valid")
    public String valid(@Valid Student stu, BindingResult result){
        System.out.println(stu);
        if(result.hasErrors()){   //验证有错误
            List<ObjectError> errors = result.getAllErrors(); //获取一个错误的集合
            for (ObjectError error : errors) {  // 循环错误信息 并打印在控制台  (foreach循环在idea中快捷键 iter)
                System.out.println("错误信息为-->"+error.getDefaultMessage()+"错误码-->"+error.getCode());
            }
        }
        return "ok";
    }

3)客户端访问
注:访问不传递参数 可能会导致错误信息不全
Spring-boot(简介及在idea中的使用)
4)控制台信息
Spring-boot(简介及在idea中的使用)

客服端传参的情况:
Spring-boot(简介及在idea中的使用)
对应控制台信息:
Spring-boot(简介及在idea中的使用)

九. springboot junit4 单选测试(ApplicationTests)

/**
 * SpringBoot1.4版本之前用的是SpringJUnit4ClassRunner.class
 */
@RunWith(SpringRunner.class)
/**
 * SpringBoot1.4版本之前用的是@SpringApplicationConfiguration(classes = Application.class)
 */
@SpringBootTest
/**
 * 测试环境使用,用来表示测试环境使用的ApplicationContext将是WebApplicationContext类型的
 */
@WebAppConfiguration
public class BootApplicationTests {
	private MockMvc mvc = null;
	@Before
	public void before(){
		mvc= MockMvcBuilders.standaloneSetup(new TestController()).build();
	}
	@Test
	public void test() throws Exception{
		/**
		 * 1、mockMvc.perform执行一个请求。
		 * 2、MockMvcRequestBuilders.get("XXX")构造一个请求。
		 * 3、ResultActions.param添加请求传值
		 * 4、ResultActions.accept(MediaType.TEXT_HTML_VALUE))设置返回类型
		 * 5、ResultActions.andExpect添加执行完成后的断言。
		 * 6、ResultActions.andDo添加一个结果处理器,表示要对结果做点什么事情
		 *   比如此处使用MockMvcResultHandlers.print()输出整个响应结果信息。
		 * 5、ResultActions.andReturn表示执行完成后返回相应的结果。
		 */
		MvcResult mvcResult= mvc.perform(MockMvcRequestBuilders.get("/valid")
				.param("name","zxf")
				.accept(MediaType.TEXT_HTML_VALUE))
				.andExpect(MockMvcResultMatchers.status().isOk())             //等同于Assert.assertEquals(200,status);
				// .andExpect(MockMvcResultMatchers.content().string("hello lvgang"))    //等同于 Assert.assertEquals("hello lvgang",content);
				.andDo(MockMvcResultHandlers.print())
				.andReturn();
		/**int status=mvcResult.getResponse().getStatus();                 //得到返回代码
		String content=mvcResult.getResponse().getContentAsString();    //得到返回结果

		Assert.assertEquals(200,status);                        //断言,判断返回代码是否正确
		Assert.assertEquals("hello lvgang",content);            //断言,判断返回的值是否正确*/
	}
	
	@Test
	@Ignore // 忽略测试方法
	public void contextLoads() {
	}

}