spring boot
Posted _陈昱先
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spring boot相关的知识,希望对你有一定的参考价值。
Spring Boot
特性
Spring Boot四大核心: (每个特性都是为了简化Spring)
- 自动配置:
- 起步依赖:
- 命令行界面:
- Actuator
简而言之,Spring Boot就是Spring,他做了那些没有他也会去写的Spring Bean配置.
项目目录
- Build.gradle||pom.xml
Gradle构建说明文件 若是使用Maven则为pom.xml(Project object model) - Src/main/java/xxxxApplication.java
程序的启动引导类 主要的Spring配置类 @SpringBootApplication(开启组件扫描和自动配置) @SpringBootApplication=(@Configuration + @CompanentScan + @EnableAutoConfiguration) - Src/main/resources/application.properties
配置应用程序和Spring Boot的属性 - Application与其他层的包属于同一级别
步骤
- 定义领域模型(定义实体 @Entity)
- 定义仓库接口,实现(@Repository,继承了Jpa的接口不需要使用标注?)
- 定义业务接口,实现(@Service)
- Web前端(@Controller)
@Entity
@Repository
- JpaRepository有两个参数:仓库操作的领域类型(Entity),与Id的类型
public interface Test extends JpaRepository<Entity,Long>(){
List<Entity> findById(Long id);
}
@Service
@Controller
- @Controller 返回视图名,在templates中寻找html
@ControllerRest返回json
- @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,若是未经过身份验证,则重定向到登录界面
身份验证的请求:
- @WithMockUser:加载安全上下文,包含一个UserDetails,使用了给定的用户名,密码,授权
@Test
@WithMockUser(username=”chen”
password=”pass”
roles=”READER”)
- @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来写
以上是关于spring boot的主要内容,如果未能解决你的问题,请参考以下文章
一张图,理顺 Spring Boot应用在启动阶段执行代码的几种方式
一张图帮你记忆,Spring Boot 应用在启动阶段执行代码的几种方式
一张图,理顺 Spring Boot应用在启动阶段执行代码的几种方式