您好,登錄后才能下訂單哦!
spring是目前java開(kāi)發(fā)比較熱門的框架,配置boot和cloud能夠快速打造出一個(gè)restful項(xiàng)目
spriing項(xiàng)目中主要用到的組件有
1:@Controller:控制器,用來(lái)綁定url和對(duì)應(yīng)的處理方法,@RestController
2:@Service:一個(gè)組件,主要用來(lái)做處理業(yè)務(wù)邏輯
3:@Repository:主要是用作數(shù)據(jù)處理層
4:@Component:一般的組件
項(xiàng)目實(shí)戰(zhàn):一個(gè)基礎(chǔ)的項(xiàng)目代碼
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包和響應(yīng)式包,響應(yīng)式是非阻塞IO的一種實(shí)現(xiàn),在servlet請(qǐng)求的時(shí)候會(huì)把業(yè)務(wù)處理過(guò)程掛起,然后處理完成獲得結(jié)果了才重新激活servlet線程返回結(jié)果。這樣的好處是提高了線程處理能力,提高了并發(fā)處理。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
3:聲明一個(gè)Rest控制器,聲明后返回的數(shù)據(jù)默認(rèn)是json格式
@RestController
@RequestMapping("/myurl") //綁定一個(gè)url前綴
public class MyController[
@GetMapping("/api-a")
public Mono<Object> testA() {
return Mono.just("hello");
}
}
當(dāng)請(qǐng)求/myurl/api-a時(shí),返回json數(shù)據(jù)是hello
路徑匹配規(guī)則:可以使用正則已經(jīng)ant風(fēng)格的匹配模式,多個(gè)路徑都符合時(shí)以最長(zhǎng)匹配路徑為最優(yōu)選擇。
4:聲明一些接口然后添加實(shí)現(xiàn)類,并注解@Service或者@Repository
5:?jiǎn)?dòng)類:
@SpringApplication
public class AppStarter {
public static void main(String[] args) }
SpringApplication.run(AppStarter.class, args);
}
略
1:引入依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
2: 使用組件注解的方式偵聽(tīng)消息隊(duì)列:
@Component
public 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:需要手動(dòng)確認(rèn)消息的,要配置:
spring.rabbitmq.listener.simple.acknowledge-mode=manual
然后在接收消息的地方進(jìn)行手動(dòng)確認(rèn)channel.basicAck(deliveryTag, false);如果出錯(cuò)不確認(rèn)則會(huì)把消息卡住,unack消息會(huì)出現(xiàn),然后接收不到之后的消息。
4:發(fā)送消息:在需要操作消息的地方注入
@Autowired
private RabbitTemplate amqpTemplate;
然后調(diào)用amqpTemplate.convertAndSend(body.getExchange(), body.getRoutingKey(), body);即可
feign是一個(gè)封裝好的http客戶端調(diào)用,能夠快速地調(diào)用rest api的內(nèi)容
1:引入依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
<version>2.0.2.RELEASE</version>
</dependency>
2:在配置類上添加:@EnableFeignClients
3:聲明一個(gè)接口,接口上注解@FeignClient()
@FeignClient(name="myfeign",url="http://localhost/api-a"),
還可以配置decode和encode對(duì)請(qǐng)求的參數(shù)和響應(yīng)的結(jié)果進(jìn)行編碼。默認(rèn)使用的是string,當(dāng)需要請(qǐng)求對(duì)象或者返回對(duì)象時(shí)則需要重新編碼構(gòu)造。
4:在方法上注解@RequestMapping("/myrul")來(lái)確定請(qǐng)求的實(shí)際路徑和方法
略
1:聲明一個(gè)切面組件
@Component
@Aspect
public class MyAspect {
}
2:在切面里聲明切點(diǎn)
@Pointcut("execution(* com.seasfood.producer..*.*(..))")
void myMethod() {
}
3:聲明通知,即切入之后要在哪個(gè)點(diǎn)位進(jìn)行處理,主要用的before,after,around等
@Before("myMethod()")
void doCheck(JoinPoint joinPoint) {
//做些什么
}
@Around
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。