美文网首页
第八节 微服务部分追加

第八节 微服务部分追加

作者: 勃列日涅夫 | 来源:发表于2018-08-31 22:59 被阅读11次
    1. 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);
        }
    }
    
    1. 可以为每个项目 配置异常处理
    • 首先整个项目中设计一个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;
        }
    }
    

    相关文章

      网友评论

          本文标题:第八节 微服务部分追加

          本文链接:https://www.haomeiwen.com/subject/xxgewftx.html