第八节 微服务部分追加

  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;
    }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序员的SOD蜜

PostgreSQL的.NET驱动程序Npgsql中参数对象的一个Bug

最近将公司的项目从SqlServer移植到PostgreSQL数据库上来,在调用数据库的存储过程(自定义函数)的时候,发现一个奇怪的问题,老是报函数无法找到。 ...

3027
来自专栏用户2442861的专栏

使用Spring JDBCTemplate简化JDBC的操作

http://www.cnblogs.com/lichenwei/p/3902294.html

1681
来自专栏进击的程序猿

第2章:spring 依赖第2章:spring 依赖

另外在声明具体的值上,我们可以是 Straight values(primitives, Strings),也可以使idref元素,或者是对其他bean的指向,...

863
来自专栏闻道于事

在静态方法中应用spring注入的类

最近在一次项目的重构中,原项目需要在静态方法中调用service,现在需要更换框架,service需要自动注入,无法再静态方法中调用

963
来自专栏DOTNET

Entity Framework——记录执行的命令信息

有两种方法可以记录执行的SQl语句: 使用DbContext.Database.Log属性 实现IDbCommandInterceptor接口 一 使用DbCo...

3495
来自专栏QQ音乐技术团队的专栏

一种避免 iOS 内存碎片的方法

CFStringCreateWithBytes 方法分配的字符串是堆空间,如果数据过长,则很容易产生内存碎片。解决这个问题有两种思路:一是在栈空间分配内存,二是...

8000
来自专栏平凡文摘

Spring AOP 的实现原理

1292
来自专栏史上最简单的Spring Cloud教程

Spring详解篇之 AOP面向切面编程

一、概述 Aop(aspect oriented programming面向切面编程),是spring框架的另一个特征。AOP包括切面、连接点、通知(advic...

2047
来自专栏java一日一条

Spring AOP应用

最近新项目要启动,在搭建项目基础架构的时候,想要加入日志功能和执行性能监控的功能,想了很多的想法,最后还是想到用spring的aop功能,一是不需要写那么多的重...

1611
来自专栏一枝花算不算浪漫

[Spring框架]Spring AOP基础入门总结一.

3679

扫码关注云+社区

领取腾讯云代金券