스프링 에서 배우 기 - D 강좌 학습 노트
spring -> spring boot -> spring cloud
spring project: https://github.com/spring-projects spring 튜 토리 얼:https://github.com/dyc87112
swoft 개원 프로젝트 의 개발 에 참여 하고 개발 팀 의 기술 선택 에 있어 spring 의 디자인 을 선 호 하 는 경향 이 있 습 니 다. 저 는 아직 약 하기 때문에 이 편 을 열 어 보충 을 했 습 니 다. 아마도 자신 에 게 커 다란 구 덩이 를 팠 을 것 입 니 다. 그러나 저 는 낙 천 파 - 만수 천 산 은 한가 할 뿐 입 니 다. 오늘 을 보 세 요.
시리즈 튜 토리 얼 작성 안내: 테마 설명 - > 코드 예제 + 유닛 테스트
spring boot
Spring - Boot 기초 강좌
가장 핵심 적 인 두 가지 요소: 주입 DI + 절단면 프로 그래 밍 AOP 에 의존
//
@Value("${com.didispace.blog.name}")
private String name;
// web
@RestController() // @ResponseBody
@Controller()
@ResponseBody()
@RequestMapping()
@PathVariable
@RequestParam
@ModelAttribute
// Swagger2
@ApiOperation(value=" ", notes=" url id , user ")
@ApiImplicitParams({
@ApiImplicitParam(name = "id", value = " ID", required = true, dataType = "Long"),
@ApiImplicitParam(name = "user", value = " user", required = true, dataType = "User")
})
// Spring-data-jpa
@Query("from User u where u.name=:name")
User findUser(@Param("name") String name);
// mybatis-spring-boot-starter
@Select("SELECT * FROM USER WHERE NAME = #{name}")
User findByName(@Param("name") String name);
@Insert("INSERT INTO USER(NAME, AGE) VALUES(#{name}, #{age})")
int insert(@Param("name") String name, @Param("age") Integer age);
//
@Transactional(isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRED)
@Rollback
@EnableCaching // application
@Cacheable // repository
@CachePut //
// task
@EnableScheduling
@Scheduled(fixedRate = 5000) // 5s
@Scheduled(fixedDelay = 5000)
@Scheduled(initialDelay=1000, fixedRate=5000)
@Scheduled(cron="*/5 * * * * *")
@EnableAsync
@Async
//
while(true) {
if(task1.isDone() && task2.isDone() && task3.isDone()) {
// ,
break;
}
Thread.sleep(1000);
}
// task
@Async("taskExecutor")
@Bean("taskExecutor")
public Executor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(10);
executor.setMaxPoolSize(20);
executor.setQueueCapacity(200);
executor.setKeepAliveSeconds(60);
executor.setThreadNamePrefix("taskExecutor-");
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
//
executor.setWaitForTasksToCompleteOnShutdown(true);
executor.setAwaitTerminationSeconds(60);
return executor;
}
@Test
#
com.didispace.blog.desc=${com.didispace.blog.name} 《${com.didispace.blog.title}》
#
com.didispace.blog.value=${random.value}
#
java -jar xxx.jar --server.port=8888
#
spring.profiles.active=test
application-dev.properties # dev/test/prod
#
/autoconfig //
/beans
/configprops
/env
/mappings
/info
/metrics //
/health
/dump
/trace
/shutdown //
메시지 큐 MQ
message broker:
Spring - Cloud 기초 튜 토리 얼
고가 용: 다 중 노드 / 선행 LB / 서비스 로 등록
// mq
@StreamListener(Sink.INPUT)
@Input(Sink.INPUT)
SubscribableChannel input();
//
@Component
spring.application.name=trace-1
server.port=9101
#
eureka.client.serviceUrl.defaultZone=http://eureka.didispace.com/eureka/
#
ribbon.eager-load.enabled=true
ribbon.eager-load.clients=hello-service, user-service
# mq
spring.cloud.stream.bindings.input.group=Service-A #
spring.cloud.stream.bindings.input.destination=greetings
spring.cloud.stream.bindings.input.consumer.partitioned=true #
spring.cloud.stream.instanceCount=2
spring.cloud.stream.instanceIndex=0
# mq
spring.cloud.stream.bindings.output.destination=greetings #
spring.cloud.stream.bindings.output.producer.partitionKeyExpression=payload #
spring.cloud.stream.bindings.output.producer.partitionCount=2
#
server.port=0 # spring
eureka.instance.instance-id=${spring.application.name}:${random.int}
server.port=${random.int[10000,19999]} # random
마지막 에 쓰다
이 학 과 는 D 대 블 로그 튜 토리 얼 을 읽 고 필 기 를 모 아 만 들 었 습 니 다. D 대 공유 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.