第八节 微服务部分追加
2018-08-31 本文已影响11人
勃列日涅夫
- spring boot test测试框架的简单使用
- 导入pom
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
使用类似如下:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest
public class UserControllerIntegrationTests {
private final RestTemplate restTemplate = new RestTemplate();
//Required to Generate JSON content from Java objects
public static final ObjectMapper objectMapper = new ObjectMapper();
@Value("${local.server.port}")
private int port;
/**
* Test the GET /v1/user/{id} API
*/
@Test
public void testGetById() {
//API call
Map<String, Object> response
= restTemplate.getForObject("http://localhost:" + port + "/v1/user/1", Map.class);
assertNotNull(response);
//Asserting API Response
String id = response.get("id").toString();
assertNotNull(id);
assertEquals("1", id);
String name = response.get("name").toString();
assertNotNull(name);
assertEquals("User Name 1", name);
boolean isModified = (boolean) response.get("isModified");
assertEquals(false, isModified);
}
}
- 可以为每个项目 配置异常处理
- 首先整个项目中设计一个common的模块,该模块是为了设计一些公共的功能同时兼顾代码的复用
我们在其他模块中引入该模块就可以使用pom 引入参考如下:
<dependency>
<groupId>com.xzg</groupId>
<artifactId>online-table-reservation-common</artifactId>
<version>v1</version>
</dependency>
实现方式有两种方式,其一直接使用AOP自己去拦截controler实现
其二使用spring提供的@RestControllerAdvice 和 @ExceptionHandler实现
第一种实现方式下面是一种xml配置:
<!-- aop -->
<aop:aspectj-autoproxy />
<beans:bean id="controllerAop" class="xxx.common.aop.ControllerAOP" />
<aop:config>
<aop:aspect id="myAop" ref="controllerAop">
<aop:pointcut id="target"
expression="execution(public xxx.common.beans.ResultBean *(..))" />
<aop:around method="handlerControllerMethod" pointcut-ref="target" />
</aop:aspect>
</aop:config>
也可以使用javaconfig
//公共切点定义
@Aspect
public class AopArchitecture {
//业务服务是定义在服务接口中的任意方法的执行。
@Pointcut("execution(* com.xxx.aop..service.*.*(..))")
public void businessService() {}
}
//声明通知(前置通知 后置通知 环绕通知 ) 具体根据实现
例如环绕
@Aspect
public class AroundExample {
//引入前面的的切点
@Around("com.xxx.AopArchitecture.businessService()")
public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {
// start todo
Object retVal = pjp.proceed();
// stop todo
return retVal;
}
}