spring mvc实战
spring是目前java开发比较热门的框架,配置boot和cloud能够快速打造出一个restful项目
spriing项目中主要用到的组件有
1:@Controller:控制器,用来绑定url和对应的处理方法,@RestController
2:@Service:一个组件,主要用来做处理业务逻辑
3:@Repository:主要是用作数据处理层
4:@Component:一般的组件
项目实战:一个基础的项目代码
1:添加spring-cloud依赖:
<properties> <spring-cloud.version>Finchley.SR2</spring-cloud.version></properties><repositories> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository></repositories><parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.0.RELEASE</version></parent><dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
2:引入web包和响应式包,响应式是非阻塞IO的一种实现,在servlet请求的时候会把业务处理过程挂起,然后处理完成获得结果了才重新激活servlet线程返回结果。这样的好处是提高了线程处理能力,提高了并发处理。
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-webflux</artifactId> </dependency>
3:声明一个Rest控制器,声明后返回的数据默认是json格式
@RestController@RequestMapping("/myurl") //绑定一个url前缀public class MyController[ @GetMapping("/api-a") public Mono<Object> testA() { return Mono.just("hello"); }}
当请求/myurl/api-a时,返回json数据是hello
路径匹配规则:可以使用正则已经ant风格的匹配模式,多个路径都符合时以最长匹配路径为最优选择。
4:声明一些接口然后添加实现类,并注解@Service或者@Repository
5:启动类:
@SpringApplicationpublic class AppStarter { public static void main(String[] args) } SpringApplication.run(AppStarter.class, args); }
配合mybatis操作数据库
略
使用amqp操作rabbitmq消息服务1:引入依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId></dependency>
2: 使用组件注解的方式侦听消息队列:
@Componentpublic class OrderMessageHandler { @RabbitListener(queues = {"OrderToCreate"}) public void handleMessage(MessageBodyDTO payload, @Header(AmqpHeaders.CHANNEL) Channel channel, @Header(AmqpHeaders.DELIVERY_TAG) Long deliveryTag) throws IOException { channel.basicAck(deliveryTag, false); }}
3:需要手动确认消息的,要配置:
spring.rabbitmq.listener.simple.acknowledge-mode=manual
然后在接收消息的地方进行手动确认channel.basicAck(deliveryTag, false);如果出错不确认则会把消息卡住,unack消息会出现,然后接收不到之后的消息。
4:发送消息:在需要操作消息的地方注入
@Autowiredprivate RabbitTemplate amqpTemplate; 然后调用amqpTemplate.convertAndSend(body.getExchange(), body.getRoutingKey(), body);即可
操作feign
feign是一个封装好的http客户端调用,能够快速地调用rest api的内容
1:引入依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> <version>2.0.2.RELEASE</version> </dependency>
2:在配置类上添加:@EnableFeignClients
3:声明一个接口,接口上注解@FeignClient()
@FeignClient(name="myfeign",url="http://localhost/api-a"),
还可以配置decode和encode对请求的参数和响应的结果进行编码。默认使用的是string,当需要请求对象或者返回对象时则需要重新编码构造。
4:在方法上注解@RequestMapping("/myrul")来确定请求的实际路径和方法
操作Cache略
AOP1:声明一个切面组件
@Component@Aspectpublic class MyAspect {}
2:在切面里声明切点
@Pointcut("execution(* com.seasfood.producer..*.*(..))") void myMethod() { }
3:声明通知,即切入之后要在哪个点位进行处理,主要用的before,after,around等
@Before("myMethod()") void doCheck(JoinPoint joinPoint) { //做些什么 } @Around
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。