最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 微服務(wù)架構(gòu)最佳實(shí)踐之如何構(gòu)建可擴(kuò)展的系統(tǒng)

 更新時(shí)間:2026年04月17日 10:45:38   作者:程序員鴨梨  
本文介紹了Java微服務(wù)架構(gòu)的最佳實(shí)踐,包括微服務(wù)架構(gòu)概述、技術(shù)棧選擇、設(shè)計(jì)原則、通信方式、服務(wù)注冊(cè)與發(fā)現(xiàn)、配置管理、網(wǎng)關(guān)、監(jiān)控和安全等方面,通過實(shí)戰(zhàn)案例,展示了如何構(gòu)建一個(gè)電商系統(tǒng)的微服務(wù)架構(gòu),并強(qiáng)調(diào)了合理應(yīng)用微服務(wù)架構(gòu)的最佳實(shí)踐和注意事項(xiàng)

一、引言

微服務(wù)架構(gòu)已經(jīng)成為現(xiàn)代軟件開發(fā)的主流架構(gòu)模式,它可以幫助我們構(gòu)建更可擴(kuò)展、更靈活的系統(tǒng)。Java 作為企業(yè)級(jí)應(yīng)用的首選語言,在微服務(wù)架構(gòu)中也發(fā)揮著重要作用。今天,我想和大家分享一下 Java 微服務(wù)架構(gòu)的最佳實(shí)踐,幫助大家構(gòu)建更可靠、更高效的微服務(wù)系統(tǒng)。

二、微服務(wù)架構(gòu)概述

微服務(wù)架構(gòu)是一種將應(yīng)用拆分為多個(gè)獨(dú)立服務(wù)的架構(gòu)模式,每個(gè)服務(wù)都可以獨(dú)立開發(fā)、部署和擴(kuò)展。微服務(wù)架構(gòu)的核心原則包括:

  • 服務(wù)拆分:將大型應(yīng)用拆分為多個(gè)小型服務(wù)
  • 服務(wù)獨(dú)立:每個(gè)服務(wù)都有自己的數(shù)據(jù)庫和業(yè)務(wù)邏輯
  • 服務(wù)通信:服務(wù)之間通過網(wǎng)絡(luò)進(jìn)行通信
  • 服務(wù)彈性:服務(wù)能夠自動(dòng)恢復(fù)和擴(kuò)展

三、微服務(wù)技術(shù)棧

1. 服務(wù)框架

  • Spring Boot:快速構(gòu)建微服務(wù)
  • Spring Cloud:提供微服務(wù)的基礎(chǔ)設(shè)施
  • Quarkus:輕量級(jí)微服務(wù)框架
  • Micronaut:高性能微服務(wù)框架

2. 服務(wù)通信

  • REST:基于 HTTP 的 RESTful API
  • gRPC:高性能的 RPC 框架
  • GraphQL:靈活的 API 查詢語言
  • 消息隊(duì)列:如 Kafka、RabbitMQ

3. 服務(wù)注冊(cè)與發(fā)現(xiàn)

  • Eureka:Spring Cloud 原生的服務(wù)注冊(cè)與發(fā)現(xiàn)
  • Consul:多數(shù)據(jù)中心的服務(wù)注冊(cè)與發(fā)現(xiàn)
  • Nacos:阿里巴巴開源的服務(wù)注冊(cè)與發(fā)現(xiàn)
  • Zookeeper:分布式協(xié)調(diào)服務(wù)

4. 配置管理

  • Spring Cloud Config:集中管理配置
  • Consul KV:基于 Consul 的配置管理
  • Nacos Config:基于 Nacos 的配置管理
  • Apollo:攜程開源的配置管理

5. 服務(wù)網(wǎng)關(guān)

  • Spring Cloud Gateway:基于 WebFlux 的網(wǎng)關(guān)
  • Zuul:Netflix 開源的網(wǎng)關(guān)
  • Kong:基于 Nginx 的 API 網(wǎng)關(guān)
  • Traefik:現(xiàn)代化的邊緣路由器

6. 服務(wù)監(jiān)控

  • Spring Boot Actuator:監(jiān)控應(yīng)用健康狀態(tài)
  • Prometheus:監(jiān)控指標(biāo)收集
  • Grafana:指標(biāo)可視化
  • ELK Stack:日志收集和分析

7. 服務(wù)安全

  • Spring Security:認(rèn)證和授權(quán)
  • OAuth 2.0:授權(quán)框架
  • JWT:無狀態(tài)認(rèn)證
  • API Gateway:統(tǒng)一安全控制

四、微服務(wù)架構(gòu)最佳實(shí)踐

1. 服務(wù)設(shè)計(jì)

  • 服務(wù)邊界:根據(jù)業(yè)務(wù)領(lǐng)域劃分服務(wù)邊界
  • 服務(wù)粒度:服務(wù)粒度要適中,不要過大或過小
  • 服務(wù)接口:設(shè)計(jì)清晰、穩(wěn)定的服務(wù)接口
  • 服務(wù)版本:使用版本控制管理服務(wù)接口

示例

// 服務(wù)接口設(shè)計(jì)
@RestController
@RequestMapping("/api/v1/users")
public class UserController {
    @Autowired
    private UserService userService;
    @GetMapping("/{id}")
    public ResponseEntity<User> getUser(@PathVariable Long id) {
        User user = userService.getUser(id);
        return ResponseEntity.ok(user);
    }
    @PostMapping
    public ResponseEntity<User> createUser(@RequestBody User user) {
        User createdUser = userService.createUser(user);
        return ResponseEntity.created(URI.create("/api/v1/users/" + createdUser.getId())).body(createdUser);
    }
    @PutMapping("/{id}")
    public ResponseEntity<User> updateUser(@PathVariable Long id, @RequestBody User user) {
        User updatedUser = userService.updateUser(id, user);
        return ResponseEntity.ok(updatedUser);
    }
    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
        userService.deleteUser(id);
        return ResponseEntity.noContent().build();
    }
}

2. 服務(wù)通信

  • 同步通信:使用 REST 或 gRPC 進(jìn)行同步通信
  • 異步通信:使用消息隊(duì)列進(jìn)行異步通信
  • 服務(wù)調(diào)用:使用 Feign 或 RestTemplate 調(diào)用其他服務(wù)
  • 負(fù)載均衡:使用 Ribbon 或 Spring Cloud LoadBalancer 進(jìn)行負(fù)載均衡

示例

// 使用 Feign 調(diào)用其他服務(wù)
@FeignClient(name = "order-service", url = "http://order-service")
public interface OrderServiceClient {
    @GetMapping("/api/v1/orders/user/{userId}")
    List<Order> getOrdersByUserId(@PathVariable Long userId);
}
// 使用 RestTemplate 調(diào)用其他服務(wù)
@Service
public class UserService {
    private final RestTemplate restTemplate;
    public UserService(RestTemplate restTemplate) {
        this.restTemplate = restTemplate;
    }
    public List<Order> getOrdersByUserId(Long userId) {
        String url = "http://order-service/api/v1/orders/user/" + userId;
        return restTemplate.getForObject(url, new ParameterizedTypeReference<List<Order>>() {});
    }
}
// 使用消息隊(duì)列進(jìn)行異步通信
@Service
public class OrderService {
    private final KafkaTemplate<String, Order> kafkaTemplate;
    public OrderService(KafkaTemplate<String, Order> kafkaTemplate) {
        this.kafkaTemplate = kafkaTemplate;
    }
    public void createOrder(Order order) {
        // 保存訂單
        orderRepository.save(order);
        // 發(fā)送消息
        kafkaTemplate.send("orders", order);
    }
}
@Service
public class OrderConsumer {
    @KafkaListener(topics = "orders", groupId = "order-group")
    public void handleOrder(Order order) {
        // 處理訂單
        System.out.println("Received order: " + order);
    }
}

3. 服務(wù)注冊(cè)與發(fā)現(xiàn)

  • 服務(wù)注冊(cè):服務(wù)啟動(dòng)時(shí)注冊(cè)到注冊(cè)中心
  • 服務(wù)發(fā)現(xiàn):服務(wù)通過注冊(cè)中心發(fā)現(xiàn)其他服務(wù)
  • 健康檢查:定期檢查服務(wù)的健康狀態(tài)
  • 服務(wù)下線:服務(wù)停止時(shí)從注冊(cè)中心下線

示例

# application.yml
spring:
  application:
    name: user-service
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
# 啟用服務(wù)注冊(cè)與發(fā)現(xiàn)
@SpringBootApplication
@EnableDiscoveryClient
public class UserServiceApplication {
    public static void main(String[] args) {
        SpringApplication.run(UserServiceApplication.class, args);
    }
}

4. 配置管理

  • 集中配置:將配置集中存儲(chǔ)和管理
  • 環(huán)境隔離:為不同環(huán)境配置不同的配置
  • 動(dòng)態(tài)更新:支持配置的動(dòng)態(tài)更新
  • 配置加密:對(duì)敏感配置進(jìn)行加密

示例

# application.yml
spring:
  application:
    name: user-service
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        file-extension: yaml
        group: DEFAULT_GROUP
# 配置類
@ConfigurationProperties(prefix = "user")
public class UserConfig {
    private String defaultRole;
    private int maxUsers;
    // getters and setters
}
# 使用配置
@Service
public class UserService {
    private final UserConfig userConfig;
    public UserService(UserConfig userConfig) {
        this.userConfig = userConfig;
    }
    public void createUser(User user) {
        if (user.getRole() == null) {
            user.setRole(userConfig.getDefaultRole());
        }
        // 其他邏輯
    }
}

5. 服務(wù)網(wǎng)關(guān)

  • 路由管理:管理服務(wù)的路由規(guī)則
  • 負(fù)載均衡:在網(wǎng)關(guān)層面進(jìn)行負(fù)載均衡
  • 安全控制:在網(wǎng)關(guān)層面進(jìn)行認(rèn)證和授權(quán)
  • 限流熔斷:在網(wǎng)關(guān)層面進(jìn)行限流和熔斷

示例

# application.yml
spring:
  cloud:
    gateway:
      routes:
        - id: user-service
          uri: lb://user-service
          predicates:
            - Path=/api/v1/users/**
        - id: order-service
          uri: lb://order-service
          predicates:
            - Path=/api/v1/orders/**
# 網(wǎng)關(guān)配置
@Configuration
public class GatewayConfig {
    @Bean
    public SecurityWebFilterChain springSecurityFilterChain(ServerHttpSecurity http) {
        http
            .authorizeExchange()
            .pathMatchers("/api/v1/**").authenticated()
            .anyExchange().permitAll()
            .and()
            .oauth2Login();
        return http.build();
    }
}

6. 服務(wù)監(jiān)控

  • 健康檢查:定期檢查服務(wù)的健康狀態(tài)
  • 指標(biāo)收集:收集服務(wù)的運(yùn)行指標(biāo)
  • 日志收集:收集服務(wù)的日志
  • 分布式追蹤:追蹤服務(wù)的調(diào)用鏈路

示例

# application.yml
management:
  endpoints:
    web:
      exposure:
        include: health,info,metrics,prometheus
  metrics:
    tags:
      application: ${spring.application.name}
# 添加依賴
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>

7. 服務(wù)安全

  • 認(rèn)證:驗(yàn)證用戶的身份
  • 授權(quán):控制用戶的訪問權(quán)限
  • 加密:加密敏感數(shù)據(jù)
  • 審計(jì):記錄用戶的操作

示例

// 安全配置
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
            .antMatchers("/api/v1/users/**").hasRole("USER")
            .antMatchers("/api/v1/admin/**").hasRole("ADMIN")
            .anyRequest().authenticated()
            .and()
            .oauth2Login();
    }
}
// 使用 JWT
@Service
public class JwtService {
    private final String secret = "your-secret-key";
    public String generateToken(User user) {
        Claims claims = Jwts.claims().setSubject(user.getUsername());
        claims.put("role", user.getRole());
        return Jwts.builder()
            .setClaims(claims)
            .setExpiration(new Date(System.currentTimeMillis() + 86400000))
            .signWith(SignatureAlgorithm.HS256, secret)
            .compact();
    }
    public Claims validateToken(String token) {
        return Jwts.parser()
            .setSigningKey(secret)
            .parseClaimsJws(token)
            .getBody();
    }
}

五、微服務(wù)部署

1. 容器化

  • Docker:將服務(wù)打包為 Docker 鏡像
  • Docker Compose:本地開發(fā)和測(cè)試
  • Kubernetes:容器編排和管理

示例

# Dockerfile
FROM openjdk:11-jre-slim
WORKDIR /app
COPY target/user-service.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
# docker-compose.yml
version: '3'
services:
  user-service:
    build: .
    ports:
      - "8080:8080"
    environment:
      - SPRING_PROFILES_ACTIVE=dev
    depends_on:
      - mysql
  mysql:
    image: mysql:8.0
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=user_db
    ports:
      - "3306:3306"

2. 持續(xù)集成與持續(xù)部署

  • CI/CD:使用 Jenkins、GitLab CI 等工具
  • 自動(dòng)化測(cè)試:在 CI 過程中運(yùn)行測(cè)試
  • 自動(dòng)化部署:在 CD 過程中部署服務(wù)

示例

# .gitlab-ci.yml
stages:
  - build
  - test
  - deploy
build:
  stage: build
  script:
    - mvn clean package
  artifacts:
    paths:
      - target/*.jar
test:
  stage: test
  script:
    - mvn test
deploy:
  stage: deploy
  script:
    - docker build -t user-service .
    - docker push user-service
    - kubectl apply -f k8s/deployment.yml
  only:
    - master

3. 服務(wù)編排

  • Kubernetes:容器編排和管理
  • Helm:Kubernetes 包管理
  • Istio:服務(wù)網(wǎng)格

示例

# k8s/deployment.yml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: user-service
  labels:
    app: user-service
spec:
  replicas: 3
  selector:
    matchLabels:
      app: user-service
  template:
    metadata:
      labels:
        app: user-service
    spec:
      containers:
      - name: user-service
        image: user-service:latest
        ports:
        - containerPort: 8080
        env:
        - name: SPRING_PROFILES_ACTIVE
          value: prod
        - name: SPRING_CLOUD_NACOS_DISCOVERY_SERVER_ADDR
          value: nacos:8848
---
apiVersion: v1
kind: Service
metadata:
  name: user-service
spec:
  selector:
    app: user-service
  ports:
  - port: 80
    targetPort: 8080
  type: ClusterIP

六、微服務(wù)架構(gòu)挑戰(zhàn)

1. 服務(wù)拆分

  • 服務(wù)邊界劃分:如何合理劃分服務(wù)邊界
  • 數(shù)據(jù)一致性:如何保證分布式事務(wù)
  • 服務(wù)依賴:如何管理服務(wù)之間的依賴

2. 服務(wù)通信

  • 網(wǎng)絡(luò)延遲:如何處理網(wǎng)絡(luò)延遲
  • 服務(wù)可用性:如何保證服務(wù)的可用性
  • 服務(wù)熔斷:如何處理服務(wù)故障

3. 服務(wù)治理

  • 服務(wù)監(jiān)控:如何監(jiān)控服務(wù)的運(yùn)行狀態(tài)
  • 服務(wù)追蹤:如何追蹤服務(wù)的調(diào)用鏈路
  • 服務(wù)限流:如何防止服務(wù)過載

4. 數(shù)據(jù)管理

  • 數(shù)據(jù)分片:如何處理大規(guī)模數(shù)據(jù)
  • 數(shù)據(jù)同步:如何同步不同服務(wù)的數(shù)據(jù)
  • 數(shù)據(jù)備份:如何保證數(shù)據(jù)的安全性

七、實(shí)戰(zhàn)案例

案例:電商系統(tǒng)微服務(wù)架構(gòu)

需求:構(gòu)建一個(gè)電商系統(tǒng),支持商品管理、訂單管理、支付等功能

架構(gòu)設(shè)計(jì)

  • 服務(wù)拆分
    • 商品服務(wù):管理商品信息
    • 訂單服務(wù):管理訂單信息
    • 用戶服務(wù):管理用戶信息
    • 支付服務(wù):處理支付請(qǐng)求
    • 庫存服務(wù):管理商品庫存
  • 技術(shù)棧
    • 服務(wù)框架:Spring Boot、Spring Cloud
    • 服務(wù)通信:REST、Kafka
    • 服務(wù)注冊(cè)與發(fā)現(xiàn):Nacos
    • 配置管理:Nacos Config
    • 服務(wù)網(wǎng)關(guān):Spring Cloud Gateway
    • 服務(wù)監(jiān)控:Prometheus、Grafana
    • 服務(wù)安全:Spring Security、OAuth 2.0
    • 容器化:Docker、Kubernetes
  • 實(shí)現(xiàn)

商品服務(wù)

@RestController
@RequestMapping("/api/v1/products")
public class ProductController {
    @Autowired
    private ProductService productService;
    @GetMapping
    public ResponseEntity<List<Product>> getProducts() {
        List<Product> products = productService.getProducts();
        return ResponseEntity.ok(products);
    }
    @GetMapping("/{id}")
    public ResponseEntity<Product> getProduct(@PathVariable Long id) {
        Product product = productService.getProduct(id);
        return ResponseEntity.ok(product);
    }
    @PostMapping
    public ResponseEntity<Product> createProduct(@RequestBody Product product) {
        Product createdProduct = productService.createProduct(product);
        return ResponseEntity.created(URI.create("/api/v1/products/" + createdProduct.getId())).body(createdProduct);
    }
}

訂單服務(wù)

@RestController
@RequestMapping("/api/v1/orders")
public class OrderController {
    @Autowired
    private OrderService orderService;
    @GetMapping
    public ResponseEntity<List<Order>> getOrders() {
        List<Order> orders = orderService.getOrders();
        return ResponseEntity.ok(orders);
    }
    @GetMapping("/{id}")
    public ResponseEntity<Order> getOrder(@PathVariable Long id) {
        Order order = orderService.getOrder(id);
        return ResponseEntity.ok(order);
    }
    @PostMapping
    public ResponseEntity<Order> createOrder(@RequestBody Order order) {
        Order createdOrder = orderService.createOrder(order);
        return ResponseEntity.created(URI.create("/api/v1/orders/" + createdOrder.getId())).body(createdOrder);
    }
}

支付服務(wù)

@RestController
@RequestMapping("/api/v1/payments")
public class PaymentController {
    @Autowired
    private PaymentService paymentService;
    @PostMapping
    public ResponseEntity<Payment> createPayment(@RequestBody Payment payment) {
        Payment createdPayment = paymentService.createPayment(payment);
        return ResponseEntity.created(URI.create("/api/v1/payments/" + createdPayment.getId())).body(createdPayment);
    }
    @GetMapping("/{id}")
    public ResponseEntity<Payment> getPayment(@PathVariable Long id) {
        Payment payment = paymentService.getPayment(id);
        return ResponseEntity.ok(payment);
    }
}

結(jié)果

  • 系統(tǒng)具有良好的可擴(kuò)展性和靈活性
  • 服務(wù)之間的耦合度低,便于獨(dú)立開發(fā)和部署
  • 系統(tǒng)具有良好的可維護(hù)性和可測(cè)試性
  • 系統(tǒng)能夠自動(dòng)恢復(fù)和擴(kuò)展

八、總結(jié)

Java 微服務(wù)架構(gòu)是構(gòu)建現(xiàn)代應(yīng)用的重要手段。通過合理地應(yīng)用微服務(wù)架構(gòu)最佳實(shí)踐,我們可以構(gòu)建出更可擴(kuò)展、更靈活的系統(tǒng)。同時(shí),我們也需要注意微服務(wù)架構(gòu)帶來的挑戰(zhàn),如服務(wù)拆分、服務(wù)通信、服務(wù)治理和數(shù)據(jù)管理等。

這其實(shí)可以更優(yōu)雅一點(diǎn)。

希望這篇文章能幫助大家更好地理解和實(shí)踐 Java 微服務(wù)架構(gòu)的最佳實(shí)踐。如果你有任何問題,歡迎在評(píng)論區(qū)留言。

到此這篇關(guān)于Java 微服務(wù)架構(gòu)最佳實(shí)踐之如何構(gòu)建可擴(kuò)展的系統(tǒng)的文章就介紹到這了,更多相關(guān)Java 微服務(wù)架構(gòu)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決idea打包成功但是resource下的文件沒有成功的問題

    解決idea打包成功但是resource下的文件沒有成功的問題

    這篇文章主要介紹了解決idea打包成功但是resource下的文件沒有成功的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • java多線程消息隊(duì)列的實(shí)現(xiàn)代碼

    java多線程消息隊(duì)列的實(shí)現(xiàn)代碼

    本篇文章主要介紹了java多線程消息隊(duì)列的實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • spring-data-jpa中findOne與getOne的區(qū)別說明

    spring-data-jpa中findOne與getOne的區(qū)別說明

    這篇文章主要介紹了spring-data-jpa中findOne與getOne的區(qū)別說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • Java實(shí)戰(zhàn)玩具商城的前臺(tái)與后臺(tái)實(shí)現(xiàn)流程

    Java實(shí)戰(zhàn)玩具商城的前臺(tái)與后臺(tái)實(shí)現(xiàn)流程

    讀萬卷書不如行萬里路,只學(xué)書上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+JSP+SSM+Springboot+Jsp+maven+Mysql實(shí)現(xiàn)一個(gè)玩具商城系統(tǒng),大家可以在過程中查缺補(bǔ)漏,提升水平
    2022-01-01
  • MyBatis中的@SelectProvider注解源碼分析

    MyBatis中的@SelectProvider注解源碼分析

    這篇文章主要介紹了MyBatis中的@SelectProvider注解源碼分析,@SelectProvider功能就是用來單獨(dú)寫一個(gè)class類與方法,用來提供一些xml或者注解中不好寫的sql,今天就來說下這個(gè)注解的具體用法與源碼,需要的朋友可以參考下
    2024-01-01
  • Java+Appium實(shí)現(xiàn)屏幕錄制功能

    Java+Appium實(shí)現(xiàn)屏幕錄制功能

    這篇文章主要介紹了Java如何利用Appium實(shí)現(xiàn)屏幕錄制功能,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-06-06
  • 使用Spring Cache設(shè)置緩存條件操作

    使用Spring Cache設(shè)置緩存條件操作

    這篇文章主要介紹了使用Spring Cache設(shè)置緩存條件操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java中YYYY-MM-dd與yyyy-MM-dd的區(qū)別及跨年問題

    Java中YYYY-MM-dd與yyyy-MM-dd的區(qū)別及跨年問題

    YYYY-MM-dd可能會(huì)導(dǎo)致跨年周的日期被歸屬到錯(cuò)誤的年份, yyyy-MM-dd總是表示實(shí)際的日歷年份,無論日期所在的周是否跨年,本文就來介紹一下兩者的區(qū)別,感興趣的可以了解一下
    2024-01-01
  • Spring 動(dòng)態(tài)代理實(shí)現(xiàn)代碼實(shí)例

    Spring 動(dòng)態(tài)代理實(shí)現(xiàn)代碼實(shí)例

    這篇文章主要介紹了Spring 動(dòng)態(tài)代理實(shí)現(xiàn)代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 詳解Spring Boot自動(dòng)裝配的方法步驟

    詳解Spring Boot自動(dòng)裝配的方法步驟

    這篇文章主要介紹了詳解Spring Boot自動(dòng)裝配的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06

最新評(píng)論

黄大仙区| 崇左市| 阿拉善左旗| 新建县| 丽江市| 潜江市| 江达县| 金山区| 黄平县| 浦县| 扎鲁特旗| 黄龙县| 无为县| 韩城市| 和平县| 安福县| 台湾省| 庆阳市| 凭祥市| 威海市| 陈巴尔虎旗| 章丘市| 徐汇区| 定安县| 安塞县| 朔州市| 偃师市| 德江县| 福鼎市| 平远县| 青海省| 浦城县| 射阳县| 闸北区| 临夏县| 兴海县| 湖口县| 偏关县| 周至县| 福泉市| 舟山市|