欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring?零基礎(chǔ)入門WebFlux框架體系

 更新時(shí)間:2022年07月18日 16:11:11   作者:xharvard  
Spring5發(fā)布有兩年了,隨Spring5一起發(fā)布了一個(gè)和Spring?WebMvc同級(jí)的Spring?WebFlux。這是一個(gè)支持反應(yīng)式編程模型的新框架體系。反應(yīng)式模型區(qū)別于傳統(tǒng)的MVC最大的不同是異步的、事件驅(qū)動(dòng)的、非阻塞的,這使得應(yīng)用程序的并發(fā)性能會(huì)大大提高,單位時(shí)間能夠處理更多的請(qǐng)求

傳統(tǒng)的基于Servlet的Web框架,如Spring MVC,在本質(zhì)上都是阻塞和多線程的,每個(gè)連接都會(huì)使用一個(gè)線程。在請(qǐng)求處理的時(shí)候,會(huì)在線程池中拉取一個(gè)工作者( worker )線程來對(duì)請(qǐng)求進(jìn)行處理。同時(shí),請(qǐng)求線程是阻塞的,直到工作者線程提示它已經(jīng)完成為止。

首先webflux不是spring mvc的替代方案!webflux強(qiáng)調(diào)的是異步非阻塞,spring mvc強(qiáng)調(diào)的是同步阻塞,如果方案大部分偏向于非同步,則spring webflux才是首選。另外,如果依賴了大量阻塞式持久化 API 和網(wǎng)絡(luò) API,建議使? Spring MVC。

WebMVC:springMvc構(gòu)建在servlet api之上,因此需要Servlet容器(比如Tomcat)才能執(zhí)行。使用的是同步阻塞式IO模型,每一個(gè)請(qǐng)求對(duì)應(yīng)一個(gè)線程去處理。

WebFlux:spring webflux是一個(gè)異步非阻塞式的web框架,它能夠充分利用多核cpu的硬件資源去處理大量的并發(fā)請(qǐng)求。

相同之處

都可以使用springmvc注解,如@Controller,方便我們?cè)趦蓚€(gè)web框架中自由轉(zhuǎn)換;

都可以使用tomcat,jetty,undertow, servlet容器(servlet 3.1+)

注意點(diǎn):

spring mvc因?yàn)槭鞘褂玫耐阶枞剑奖汩_發(fā)人員編寫功能,debug測(cè)試等,一般來說,如果spring mvc能夠滿足的場(chǎng)景,就盡量不要用webflux;

使用WebFlux有一個(gè)很有 意思的副作用, 即WebFlux 的默認(rèn)嵌人式服務(wù)器是Netty而不是Tomcat。Netty 是一個(gè)異步 、事件驅(qū)動(dòng)的服務(wù)器,非常適合Spring WebFlux這樣的反應(yīng)式Web框架。

Spring WebFlux的控制器方法要接受和返回反應(yīng)式類型,如Mono和Flux,而不是領(lǐng)域類型和集合。

SpringWebflux 實(shí)現(xiàn)方式有兩種:注解編程模型函數(shù)式編程模型

基于注解編程模型

該模型與Spring MVC很相似。甚至注解都一樣。

搭建一個(gè)簡易的Spring WebFlux工程:

1,到https://start.spring.io/創(chuàng)建spring boot工程,選擇Spring Reactive Web 依賴。

2,導(dǎo)入到IDEA,創(chuàng)建controller, service, entity 等包

3,創(chuàng)建entity

public class User {
    private int id;
    private String name;
    public User() {
    }
    public User(int id, String name) {
        this.id = id;
        this.name = name;
    }
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

4,創(chuàng)建service 這里使用map模擬數(shù)據(jù)庫操作

public interface UserService {
    Mono<User> selectById(int id);
    Flux<User> selectAllUsers();
    Mono<Void> insertUser(Mono<User> user);
}
@Repository
public class UserServiceImpl implements UserService {
    private static Map<Integer, User> users = new HashMap<>();
    public UserServiceImpl() {
        users.put(1, new User(1, "劉備"));
        users.put(2, new User(2, "曹操"));
        users.put(3, new User(3, "孫權(quán)"));
    }
    @Override
    public Mono<User> selectById(int id) {
        return Mono.just(users.get(id));
    }
    @Override
    public Flux<User> selectAllUsers() {
        return Flux.fromIterable(users.values());
    }
    @Override
    public Mono<Void> insertUser(Mono<User> userMono) {
        return userMono.doOnNext(user -> {
            int id = users.size() + 1;
            users.put(id, user);
        }).thenEmpty(Mono.empty());
    }
}

5,創(chuàng)建controller

@RestController
public class UserController {
    @Autowired
    private UserService userService;
    @GetMapping("/users/{id}")
    public Mono<User> getUser(@PathVariable int id) {
        return userService.selectById(id);
    }
    @GetMapping("/users")
    public Flux<User> getAllUsers() {
        return userService.selectAllUsers();
    }
}

6,啟動(dòng) SringBoot,這里修改了端口號(hào)為9999

"D:\Program Files\java\tsjdk64\bin\java.exe" -Dvisualvm.id=31217450973500 "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2020.1.2\lib\idea_rt.jar=64346:D:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2020.1.2\bin" -Dfile.encoding=UTF-8 -classpath "D:\Program Files\java\tsjdk64\jre\lib\charsets.jar;D:\Program Files\java\tsjdk64\jre\lib\ext\access-bridge-64.jar;D:\Program Files\java\tsjdk64\jre\lib\ext\cldrdata.jar;D:\Program Files\java\tsjdk64\jre\lib\ext\dnsns.jar;D:\Program Files\java\tsjdk64\jre\lib\ext\jaccess.jar;D:\Program Files\java\tsjdk64\jre\lib\ext\localedata.jar;D:\Program Files\java\tsjdk64\jre\lib\ext\nashorn.jar;D:\Program Files\java\tsjdk64\jre\lib\ext\sunec.jar;D:\Program Files\java\tsjdk64\jre\lib\ext\sunjce_provider.jar;D:\Program Files\java\tsjdk64\jre\lib\ext\sunmscapi.jar;D:\Program Files\java\tsjdk64\jre\lib\ext\sunpkcs11.jar;D:\Program Files\java\tsjdk64\jre\lib\ext\zipfs.jar;D:\Program Files\java\tsjdk64\jre\lib\jce.jar;D:\Program Files\java\tsjdk64\jre\lib\jfr.jar;D:\Program Files\java\tsjdk64\jre\lib\jsse.jar;D:\Program Files\java\tsjdk64\jre\lib\management-agent.jar;D:\Program Files\java\tsjdk64\jre\lib\resources.jar;D:\Program Files\java\tsjdk64\jre\lib\rt.jar;D:\05_spring_dev\java-study\spring-webflux\target\classes;D:\Program Files\apache-maven-3.6.3\repo\org\springframework\boot\spring-boot-starter-webflux\2.7.1\spring-boot-starter-webflux-2.7.1.jar;D:\Program Files\apache-maven-3.6.3\repo\org\springframework\boot\spring-boot-starter\2.7.1\spring-boot-starter-2.7.1.jar;D:\Program Files\apache-maven-3.6.3\repo\org\springframework\boot\spring-boot\2.7.1\spring-boot-2.7.1.jar;D:\Program Files\apache-maven-3.6.3\repo\org\springframework\spring-context\5.3.21\spring-context-5.3.21.jar;D:\Program Files\apache-maven-3.6.3\repo\org\springframework\spring-aop\5.3.21\spring-aop-5.3.21.jar;D:\Program Files\apache-maven-3.6.3\repo\org\springframework\spring-expression\5.3.21\spring-expression-5.3.21.jar;D:\Program Files\apache-maven-3.6.3\repo\org\springframework\boot\spring-boot-autoconfigure\2.7.1\spring-boot-autoconfigure-2.7.1.jar;D:\Program Files\apache-maven-3.6.3\repo\org\springframework\boot\spring-boot-starter-logging\2.7.1\spring-boot-starter-logging-2.7.1.jar;D:\Program Files\apache-maven-3.6.3\repo\ch\qos\logback\logback-classic\1.2.11\logback-classic-1.2.11.jar;D:\Program Files\apache-maven-3.6.3\repo\ch\qos\logback\logback-core\1.2.11\logback-core-1.2.11.jar;D:\Program Files\apache-maven-3.6.3\repo\org\apache\logging\log4j\log4j-to-slf4j\2.17.2\log4j-to-slf4j-2.17.2.jar;D:\Program Files\apache-maven-3.6.3\repo\org\apache\logging\log4j\log4j-api\2.17.2\log4j-api-2.17.2.jar;D:\Program Files\apache-maven-3.6.3\repo\org\slf4j\jul-to-slf4j\1.7.36\jul-to-slf4j-1.7.36.jar;D:\Program Files\apache-maven-3.6.3\repo\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;D:\Program Files\apache-maven-3.6.3\repo\org\yaml\snakeyaml\1.30\snakeyaml-1.30.jar;D:\Program Files\apache-maven-3.6.3\repo\org\springframework\boot\spring-boot-starter-json\2.7.1\spring-boot-starter-json-2.7.1.jar;D:\Program Files\apache-maven-3.6.3\repo\com\fasterxml\jackson\core\jackson-databind\2.13.3\jackson-databind-2.13.3.jar;D:\Program Files\apache-maven-3.6.3\repo\com\fasterxml\jackson\core\jackson-annotations\2.13.3\jackson-annotations-2.13.3.jar;D:\Program Files\apache-maven-3.6.3\repo\com\fasterxml\jackson\core\jackson-core\2.13.3\jackson-core-2.13.3.jar;D:\Program Files\apache-maven-3.6.3\repo\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.13.3\jackson-datatype-jdk8-2.13.3.jar;D:\Program Files\apache-maven-3.6.3\repo\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.13.3\jackson-datatype-jsr310-2.13.3.jar;D:\Program Files\apache-maven-3.6.3\repo\com\fasterxml\jackson\module\jackson-module-parameter-names\2.13.3\jackson-module-parameter-names-2.13.3.jar;D:\Program Files\apache-maven-3.6.3\repo\org\springframework\boot\spring-boot-starter-reactor-netty\2.7.1\spring-boot-starter-reactor-netty-2.7.1.jar;D:\Program Files\apache-maven-3.6.3\repo\io\projectreactor\netty\reactor-netty-http\1.0.20\reactor-netty-http-1.0.20.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-codec-http\4.1.78.Final\netty-codec-http-4.1.78.Final.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-common\4.1.78.Final\netty-common-4.1.78.Final.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-buffer\4.1.78.Final\netty-buffer-4.1.78.Final.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-transport\4.1.78.Final\netty-transport-4.1.78.Final.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-codec\4.1.78.Final\netty-codec-4.1.78.Final.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-handler\4.1.78.Final\netty-handler-4.1.78.Final.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-codec-http2\4.1.78.Final\netty-codec-http2-4.1.78.Final.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-resolver-dns\4.1.78.Final\netty-resolver-dns-4.1.78.Final.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-resolver\4.1.78.Final\netty-resolver-4.1.78.Final.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-codec-dns\4.1.78.Final\netty-codec-dns-4.1.78.Final.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-resolver-dns-native-macos\4.1.78.Final\netty-resolver-dns-native-macos-4.1.78.Final-osx-x86_64.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-resolver-dns-classes-macos\4.1.78.Final\netty-resolver-dns-classes-macos-4.1.78.Final.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-transport-native-epoll\4.1.78.Final\netty-transport-native-epoll-4.1.78.Final-linux-x86_64.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-transport-native-unix-common\4.1.78.Final\netty-transport-native-unix-common-4.1.78.Final.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-transport-classes-epoll\4.1.78.Final\netty-transport-classes-epoll-4.1.78.Final.jar;D:\Program Files\apache-maven-3.6.3\repo\io\projectreactor\netty\reactor-netty-core\1.0.20\reactor-netty-core-1.0.20.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-handler-proxy\4.1.78.Final\netty-handler-proxy-4.1.78.Final.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-codec-socks\4.1.78.Final\netty-codec-socks-4.1.78.Final.jar;D:\Program Files\apache-maven-3.6.3\repo\org\springframework\spring-web\5.3.21\spring-web-5.3.21.jar;D:\Program Files\apache-maven-3.6.3\repo\org\springframework\spring-beans\5.3.21\spring-beans-5.3.21.jar;D:\Program Files\apache-maven-3.6.3\repo\org\springframework\spring-webflux\5.3.21\spring-webflux-5.3.21.jar;D:\Program Files\apache-maven-3.6.3\repo\org\slf4j\slf4j-api\1.7.36\slf4j-api-1.7.36.jar;D:\Program Files\apache-maven-3.6.3\repo\org\springframework\spring-core\5.3.21\spring-core-5.3.21.jar;D:\Program Files\apache-maven-3.6.3\repo\org\springframework\spring-jcl\5.3.21\spring-jcl-5.3.21.jar;D:\Program Files\apache-maven-3.6.3\repo\io\projectreactor\reactor-core\3.4.19\reactor-core-3.4.19.jar;D:\Program Files\apache-maven-3.6.3\repo\org\reactivestreams\reactive-streams\1.0.4\reactive-streams-1.0.4.jar" org.xharavard.webflux.WebfluxApplication
 
  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.7.1)
 
2022-07-14 17:05:21.976  INFO 10060 --- [           main] o.xharavard.webflux.WebfluxApplication   : Starting WebfluxApplication using Java 1.8.0-taishan on LAPTOP-N89I5VOK with PID 10060 (D:\05_spring_dev\java-study\spring-webflux\target\classes started by xhh in D:\05_spring_dev\java-study)
2022-07-14 17:05:21.978  INFO 10060 --- [           main] o.xharavard.webflux.WebfluxApplication   : No active profile set, falling back to 1 default profile: "default"
2022-07-14 17:05:23.635  INFO 10060 --- [           main] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port 9999
2022-07-14 17:05:23.640  INFO 10060 --- [           main] o.xharavard.webflux.WebfluxApplication   : Started WebfluxApplication in 2.045 seconds (JVM running for 2.394)

7,訪問

瀏覽器輸入:http://localhost:9999/users/1

返回 {"id":1,"name":"劉備"}

函數(shù)式編程模型

(1)在使用函數(shù)式編程模型操作時(shí)候,需要自己初始化服務(wù)器

(2)基于函數(shù)式編程模型時(shí)候,有兩個(gè)核心接口:RouterFunction(實(shí)現(xiàn)路由功能,請(qǐng)求轉(zhuǎn)發(fā)給對(duì)應(yīng)的 handler)和 HandlerFunction(處理請(qǐng)求生成響應(yīng)的函數(shù))。核心任務(wù)定義兩個(gè)函數(shù)式接口的實(shí)現(xiàn)并且啟動(dòng)需要的服務(wù)器。

(3)Spring WebFlux 請(qǐng) 求 和 響 應(yīng) 不 再 是 ServletRequest 和 ServletResponse ,而是ServerRequest 和 ServerResponse

1,entity和service同之前一樣

2,創(chuàng)建Handler

public class UserHandler {
    @Autowired
    private final UserService userService;
    public UserHandler(UserService userService) {
        this.userService = userService;
    }
    public Mono<ServerResponse> getUserById(ServerRequest request) {
        int userId = Integer.parseInt(request.pathVariable("id"));
        //空值處理
        Mono<ServerResponse> notFount = ServerResponse.notFound().build();
        Mono<User> userMono = this.userService.selectById(userId);
        return ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).body(userMono, User.class)
            .switchIfEmpty(notFount);
    }
    public Mono<ServerResponse> getAllUsers(ServerRequest request) {
        Flux<User> users = this.userService.selectAllUsers();
        return ServerResponse.ok().contentType(MediaType.APPLICATION_JSON).body(users, User.class);
    }
}

3,初始化服務(wù)器,編寫 Router

public class Server {
    public static void main(String[] args) throws IOException {
        Server server = new Server();
        server.createReactorServer();
        System.out.println("enter to exit");
        System.in.read();
    }
    // 創(chuàng)建路由
    public RouterFunction<ServerResponse> routingFunction() {
        UserService userService = new UserServiceImpl();
        UserHandler userHandler = new UserHandler(userService);
 
        return RouterFunctions
            .route(GET("/users/{id}").and(accept(MediaType.APPLICATION_JSON)), userHandler::getUserById)
            .andRoute(GET("/users").and(accept(MediaType.APPLICATION_JSON)), userHandler::getAllUsers);
    }
    // 創(chuàng)建服務(wù)器完成適配
    public void createReactorServer() {
        //路由和Handler適配
        RouterFunction<ServerResponse> route = routingFunction();
        HttpHandler httpHandler = toHttpHandler(route);
        ReactorHttpHandlerAdapter adapter = new ReactorHttpHandlerAdapter(httpHandler);
        //創(chuàng)建服務(wù)器
        HttpServer httpServer = HttpServer.create();
        httpServer.handle(adapter).bindNow();
    }
}

啟動(dòng)上述程序

"D:\Program Files\java\tsjdk64\bin\java.exe" -Dvisualvm.id=32992872873300 "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2020.1.2\lib\idea_rt.jar=65106:D:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2020.1.2\bin" -Dfile.encoding=UTF-8 -classpath "D:\Program Files\java\tsjdk64\jre\lib\charsets.jar;D:\Program Files\java\tsjdk64\jre\lib\ext\access-bridge-64.jar;D:\Program Files\java\tsjdk64\jre\lib\ext\cldrdata.jar;D:\Program Files\java\tsjdk64\jre\lib\ext\dnsns.jar;D:\Program Files\java\tsjdk64\jre\lib\ext\jaccess.jar;D:\Program Files\java\tsjdk64\jre\lib\ext\localedata.jar;D:\Program Files\java\tsjdk64\jre\lib\ext\nashorn.jar;D:\Program Files\java\tsjdk64\jre\lib\ext\sunec.jar;D:\Program Files\java\tsjdk64\jre\lib\ext\sunjce_provider.jar;D:\Program Files\java\tsjdk64\jre\lib\ext\sunmscapi.jar;D:\Program Files\java\tsjdk64\jre\lib\ext\sunpkcs11.jar;D:\Program Files\java\tsjdk64\jre\lib\ext\zipfs.jar;D:\Program Files\java\tsjdk64\jre\lib\jce.jar;D:\Program Files\java\tsjdk64\jre\lib\jfr.jar;D:\Program Files\java\tsjdk64\jre\lib\jsse.jar;D:\Program Files\java\tsjdk64\jre\lib\management-agent.jar;D:\Program Files\java\tsjdk64\jre\lib\resources.jar;D:\Program Files\java\tsjdk64\jre\lib\rt.jar;D:\05_spring_dev\java-study\spring-webflux\target\classes;D:\Program Files\apache-maven-3.6.3\repo\org\springframework\boot\spring-boot-starter-webflux\2.7.1\spring-boot-starter-webflux-2.7.1.jar;D:\Program Files\apache-maven-3.6.3\repo\org\springframework\boot\spring-boot-starter\2.7.1\spring-boot-starter-2.7.1.jar;D:\Program Files\apache-maven-3.6.3\repo\org\springframework\boot\spring-boot\2.7.1\spring-boot-2.7.1.jar;D:\Program Files\apache-maven-3.6.3\repo\org\springframework\spring-context\5.3.21\spring-context-5.3.21.jar;D:\Program Files\apache-maven-3.6.3\repo\org\springframework\spring-aop\5.3.21\spring-aop-5.3.21.jar;D:\Program Files\apache-maven-3.6.3\repo\org\springframework\spring-expression\5.3.21\spring-expression-5.3.21.jar;D:\Program Files\apache-maven-3.6.3\repo\org\springframework\boot\spring-boot-autoconfigure\2.7.1\spring-boot-autoconfigure-2.7.1.jar;D:\Program Files\apache-maven-3.6.3\repo\org\springframework\boot\spring-boot-starter-logging\2.7.1\spring-boot-starter-logging-2.7.1.jar;D:\Program Files\apache-maven-3.6.3\repo\ch\qos\logback\logback-classic\1.2.11\logback-classic-1.2.11.jar;D:\Program Files\apache-maven-3.6.3\repo\ch\qos\logback\logback-core\1.2.11\logback-core-1.2.11.jar;D:\Program Files\apache-maven-3.6.3\repo\org\apache\logging\log4j\log4j-to-slf4j\2.17.2\log4j-to-slf4j-2.17.2.jar;D:\Program Files\apache-maven-3.6.3\repo\org\apache\logging\log4j\log4j-api\2.17.2\log4j-api-2.17.2.jar;D:\Program Files\apache-maven-3.6.3\repo\org\slf4j\jul-to-slf4j\1.7.36\jul-to-slf4j-1.7.36.jar;D:\Program Files\apache-maven-3.6.3\repo\jakarta\annotation\jakarta.annotation-api\1.3.5\jakarta.annotation-api-1.3.5.jar;D:\Program Files\apache-maven-3.6.3\repo\org\yaml\snakeyaml\1.30\snakeyaml-1.30.jar;D:\Program Files\apache-maven-3.6.3\repo\org\springframework\boot\spring-boot-starter-json\2.7.1\spring-boot-starter-json-2.7.1.jar;D:\Program Files\apache-maven-3.6.3\repo\com\fasterxml\jackson\core\jackson-databind\2.13.3\jackson-databind-2.13.3.jar;D:\Program Files\apache-maven-3.6.3\repo\com\fasterxml\jackson\core\jackson-annotations\2.13.3\jackson-annotations-2.13.3.jar;D:\Program Files\apache-maven-3.6.3\repo\com\fasterxml\jackson\core\jackson-core\2.13.3\jackson-core-2.13.3.jar;D:\Program Files\apache-maven-3.6.3\repo\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.13.3\jackson-datatype-jdk8-2.13.3.jar;D:\Program Files\apache-maven-3.6.3\repo\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.13.3\jackson-datatype-jsr310-2.13.3.jar;D:\Program Files\apache-maven-3.6.3\repo\com\fasterxml\jackson\module\jackson-module-parameter-names\2.13.3\jackson-module-parameter-names-2.13.3.jar;D:\Program Files\apache-maven-3.6.3\repo\org\springframework\boot\spring-boot-starter-reactor-netty\2.7.1\spring-boot-starter-reactor-netty-2.7.1.jar;D:\Program Files\apache-maven-3.6.3\repo\io\projectreactor\netty\reactor-netty-http\1.0.20\reactor-netty-http-1.0.20.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-codec-http\4.1.78.Final\netty-codec-http-4.1.78.Final.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-common\4.1.78.Final\netty-common-4.1.78.Final.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-buffer\4.1.78.Final\netty-buffer-4.1.78.Final.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-transport\4.1.78.Final\netty-transport-4.1.78.Final.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-codec\4.1.78.Final\netty-codec-4.1.78.Final.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-handler\4.1.78.Final\netty-handler-4.1.78.Final.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-codec-http2\4.1.78.Final\netty-codec-http2-4.1.78.Final.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-resolver-dns\4.1.78.Final\netty-resolver-dns-4.1.78.Final.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-resolver\4.1.78.Final\netty-resolver-4.1.78.Final.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-codec-dns\4.1.78.Final\netty-codec-dns-4.1.78.Final.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-resolver-dns-native-macos\4.1.78.Final\netty-resolver-dns-native-macos-4.1.78.Final-osx-x86_64.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-resolver-dns-classes-macos\4.1.78.Final\netty-resolver-dns-classes-macos-4.1.78.Final.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-transport-native-epoll\4.1.78.Final\netty-transport-native-epoll-4.1.78.Final-linux-x86_64.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-transport-native-unix-common\4.1.78.Final\netty-transport-native-unix-common-4.1.78.Final.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-transport-classes-epoll\4.1.78.Final\netty-transport-classes-epoll-4.1.78.Final.jar;D:\Program Files\apache-maven-3.6.3\repo\io\projectreactor\netty\reactor-netty-core\1.0.20\reactor-netty-core-1.0.20.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-handler-proxy\4.1.78.Final\netty-handler-proxy-4.1.78.Final.jar;D:\Program Files\apache-maven-3.6.3\repo\io\netty\netty-codec-socks\4.1.78.Final\netty-codec-socks-4.1.78.Final.jar;D:\Program Files\apache-maven-3.6.3\repo\org\springframework\spring-web\5.3.21\spring-web-5.3.21.jar;D:\Program Files\apache-maven-3.6.3\repo\org\springframework\spring-beans\5.3.21\spring-beans-5.3.21.jar;D:\Program Files\apache-maven-3.6.3\repo\org\springframework\spring-webflux\5.3.21\spring-webflux-5.3.21.jar;D:\Program Files\apache-maven-3.6.3\repo\org\slf4j\slf4j-api\1.7.36\slf4j-api-1.7.36.jar;D:\Program Files\apache-maven-3.6.3\repo\org\springframework\spring-core\5.3.21\spring-core-5.3.21.jar;D:\Program Files\apache-maven-3.6.3\repo\org\springframework\spring-jcl\5.3.21\spring-jcl-5.3.21.jar;D:\Program Files\apache-maven-3.6.3\repo\io\projectreactor\reactor-core\3.4.19\reactor-core-3.4.19.jar;D:\Program Files\apache-maven-3.6.3\repo\org\reactivestreams\reactive-streams\1.0.4\reactive-streams-1.0.4.jar" org.xharavard.webflux.Server
17:34:57.051 [main] DEBUG reactor.util.Loggers - Using Slf4j logging framework
17:34:57.299 [main] DEBUG org.springframework.web.server.adapter.HttpWebHandlerAdapter - enableLoggingRequestDetails='false': form data and headers will be masked to prevent unsafe logging of potentially sensitive data
17:34:57.331 [main] DEBUG io.netty.util.internal.logging.InternalLoggerFactory - Using SLF4J as the default logging framework
17:34:57.333 [main] DEBUG io.netty.util.internal.PlatformDependent0 - -Dio.netty.noUnsafe: false
17:34:57.333 [main] DEBUG io.netty.util.internal.PlatformDependent0 - Java version: 8
17:34:57.334 [main] DEBUG io.netty.util.internal.PlatformDependent0 - sun.misc.Unsafe.theUnsafe: available
17:34:57.334 [main] DEBUG io.netty.util.internal.PlatformDependent0 - sun.misc.Unsafe.copyMemory: available
17:34:57.334 [main] DEBUG io.netty.util.internal.PlatformDependent0 - sun.misc.Unsafe.storeFence: available
17:34:57.335 [main] DEBUG io.netty.util.internal.PlatformDependent0 - java.nio.Buffer.address: available
17:34:57.335 [main] DEBUG io.netty.util.internal.PlatformDependent0 - direct buffer constructor: available
17:34:57.341 [main] DEBUG io.netty.util.internal.PlatformDependent0 - java.nio.Bits.unaligned: available, true
17:34:57.341 [main] DEBUG io.netty.util.internal.PlatformDependent0 - jdk.internal.misc.Unsafe.allocateUninitializedArray(int): unavailable prior to Java9
17:34:57.341 [main] DEBUG io.netty.util.internal.PlatformDependent0 - java.nio.DirectByteBuffer.<init>(long, int): available
17:34:57.341 [main] DEBUG io.netty.util.internal.PlatformDependent - sun.misc.Unsafe: available
17:34:57.342 [main] DEBUG io.netty.util.internal.PlatformDependent - -Dio.netty.tmpdir: C:\Users\xhh\AppData\Local\Temp (java.io.tmpdir)
17:34:57.342 [main] DEBUG io.netty.util.internal.PlatformDependent - -Dio.netty.bitMode: 64 (sun.arch.data.model)
17:34:57.342 [main] DEBUG io.netty.util.internal.PlatformDependent - Platform: Windows
17:34:57.343 [main] DEBUG io.netty.util.internal.PlatformDependent - -Dio.netty.maxDirectMemory: 3787980800 bytes
17:34:57.343 [main] DEBUG io.netty.util.internal.PlatformDependent - -Dio.netty.uninitializedArrayAllocationThreshold: -1
17:34:57.344 [main] DEBUG io.netty.util.internal.CleanerJava6 - java.nio.ByteBuffer.cleaner(): available
17:34:57.344 [main] DEBUG io.netty.util.internal.PlatformDependent - -Dio.netty.noPreferDirect: false
17:34:57.352 [main] DEBUG io.netty.util.internal.InternalThreadLocalMap - -Dio.netty.threadLocalMap.stringBuilder.initialSize: 1024
17:34:57.352 [main] DEBUG io.netty.util.internal.InternalThreadLocalMap - -Dio.netty.threadLocalMap.stringBuilder.maxSize: 4096
17:34:57.375 [main] DEBUG io.netty.util.ResourceLeakDetector - -Dio.netty.leakDetection.level: simple
17:34:57.375 [main] DEBUG io.netty.util.ResourceLeakDetector - -Dio.netty.leakDetection.targetRecords: 4
17:34:57.400 [main] DEBUG reactor.netty.tcp.TcpResources - [http] resources will use the default LoopResources: DefaultLoopResources {prefix=reactor-http, daemon=true, selectCount=8, workerCount=8}
17:34:57.400 [main] DEBUG reactor.netty.tcp.TcpResources - [http] resources will use the default ConnectionProvider: reactor.netty.resources.DefaultPooledConnectionProvider@65f095f8
17:34:57.401 [main] DEBUG reactor.netty.resources.DefaultLoopIOUring - Default io_uring support : false
17:34:57.654 [main] DEBUG reactor.netty.resources.DefaultLoopEpoll - Default Epoll support : false
17:34:57.655 [main] DEBUG reactor.netty.resources.DefaultLoopKQueue - Default KQueue support : false
17:34:57.660 [main] DEBUG io.netty.channel.MultithreadEventLoopGroup - -Dio.netty.eventLoopThreads: 16
17:34:57.678 [main] DEBUG io.netty.channel.nio.NioEventLoop - -Dio.netty.noKeySetOptimization: false
17:34:57.678 [main] DEBUG io.netty.channel.nio.NioEventLoop - -Dio.netty.selectorAutoRebuildThreshold: 512
17:34:57.686 [main] DEBUG io.netty.util.internal.PlatformDependent - org.jctools-core.MpscChunkedArrayQueue: available
17:34:57.707 [main] DEBUG io.netty.channel.DefaultChannelId - -Dio.netty.processId: 8008 (auto-detected)
17:34:57.709 [main] DEBUG io.netty.util.NetUtil - -Djava.net.preferIPv4Stack: false
17:34:57.709 [main] DEBUG io.netty.util.NetUtil - -Djava.net.preferIPv6Addresses: false
17:34:57.851 [main] DEBUG io.netty.util.NetUtilInitializations - Loopback interface: lo (Software Loopback Interface 1, 127.0.0.1)
17:34:57.852 [main] DEBUG io.netty.util.NetUtil - Failed to get SOMAXCONN from sysctl and file \proc\sys\net\core\somaxconn. Default: 200
17:34:57.990 [main] DEBUG io.netty.channel.DefaultChannelId - -Dio.netty.machineId: 8c:c6:81:ff:fe:4c:01:12 (auto-detected)
17:34:58.005 [main] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.numHeapArenas: 16
17:34:58.005 [main] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.numDirectArenas: 16
17:34:58.005 [main] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.pageSize: 8192
17:34:58.005 [main] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.maxOrder: 9
17:34:58.005 [main] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.chunkSize: 4194304
17:34:58.005 [main] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.smallCacheSize: 256
17:34:58.005 [main] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.normalCacheSize: 64
17:34:58.005 [main] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.maxCachedBufferCapacity: 32768
17:34:58.005 [main] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.cacheTrimInterval: 8192
17:34:58.005 [main] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.cacheTrimIntervalMillis: 0
17:34:58.005 [main] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.useCacheForAllThreads: false
17:34:58.005 [main] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.maxCachedByteBuffersPerChunk: 1023
17:34:58.010 [main] DEBUG io.netty.buffer.ByteBufUtil - -Dio.netty.allocator.type: pooled
17:34:58.010 [main] DEBUG io.netty.buffer.ByteBufUtil - -Dio.netty.threadLocalDirectBufferSize: 0
17:34:58.010 [main] DEBUG io.netty.buffer.ByteBufUtil - -Dio.netty.maxThreadLocalCharBufferSize: 16384
17:34:58.077 [reactor-http-nio-1] DEBUG reactor.netty.transport.ServerTransport - [c9915a48, L:/0:0:0:0:0:0:0:0:65129] Bound new server
enter to exit
17:35:05.073 [reactor-http-nio-2] DEBUG io.netty.buffer.AbstractByteBuf - -Dio.netty.buffer.checkAccessible: true
17:35:05.074 [reactor-http-nio-2] DEBUG io.netty.buffer.AbstractByteBuf - -Dio.netty.buffer.checkBounds: true
17:35:05.074 [reactor-http-nio-2] DEBUG io.netty.util.ResourceLeakDetectorFactory - Loaded default ResourceLeakDetector: io.netty.util.ResourceLeakDetector@301be937
17:35:05.102 [reactor-http-nio-2] DEBUG reactor.netty.http.server.HttpServerOperations - [09cda6a3, L:/0:0:0:0:0:0:0:1:65129 - R:/0:0:0:0:0:0:0:1:65130] New http connection, requesting read
17:35:05.102 [reactor-http-nio-3] DEBUG reactor.netty.http.server.HttpServerOperations - [1a0030eb, L:/0:0:0:0:0:0:0:1:65129 - R:/0:0:0:0:0:0:0:1:65131] New http connection, requesting read
17:35:05.102 [reactor-http-nio-3] DEBUG reactor.netty.transport.TransportConfig - [1a0030eb, L:/0:0:0:0:0:0:0:1:65129 - R:/0:0:0:0:0:0:0:1:65131] Initialized pipeline DefaultChannelPipeline{(reactor.left.httpCodec = io.netty.handler.codec.http.HttpServerCodec), (reactor.left.httpTrafficHandler = reactor.netty.http.server.HttpTrafficHandler), (reactor.right.reactiveBridge = reactor.netty.channel.ChannelOperationsHandler)}
17:35:05.102 [reactor-http-nio-2] DEBUG reactor.netty.transport.TransportConfig - [09cda6a3, L:/0:0:0:0:0:0:0:1:65129 - R:/0:0:0:0:0:0:0:1:65130] Initialized pipeline DefaultChannelPipeline{(reactor.left.httpCodec = io.netty.handler.codec.http.HttpServerCodec), (reactor.left.httpTrafficHandler = reactor.netty.http.server.HttpTrafficHandler), (reactor.right.reactiveBridge = reactor.netty.channel.ChannelOperationsHandler)}
17:35:05.106 [reactor-http-nio-2] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.maxCapacityPerThread: 4096
17:35:05.106 [reactor-http-nio-2] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.ratio: 8
17:35:05.106 [reactor-http-nio-2] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.chunkSize: 32
17:35:05.106 [reactor-http-nio-2] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.blocking: false
17:35:05.119 [reactor-http-nio-2] DEBUG reactor.netty.http.server.HttpServerOperations - [09cda6a3, L:/0:0:0:0:0:0:0:1:65129 - R:/0:0:0:0:0:0:0:1:65130] Increasing pending responses, now 1
17:35:05.124 [reactor-http-nio-2] DEBUG reactor.netty.http.server.HttpServer - [09cda6a3-1, L:/0:0:0:0:0:0:0:1:65129 - R:/0:0:0:0:0:0:0:1:65130] Handler is being applied: org.springframework.http.server.reactive.ReactorHttpHandlerAdapter@3bc10f7a
17:35:05.138 [reactor-http-nio-2] DEBUG org.springframework.web.server.adapter.HttpWebHandlerAdapter - [09cda6a3-1] HTTP GET "/users/1"
17:35:05.238 [reactor-http-nio-2] DEBUG org.springframework.http.codec.json.Jackson2JsonEncoder - [09cda6a3-1] Encoding [org.xharavard.webflux.entity.User@39412266]
17:35:05.252 [reactor-http-nio-2] DEBUG reactor.netty.http.server.HttpServerOperations - [09cda6a3-1, L:/0:0:0:0:0:0:0:1:65129 - R:/0:0:0:0:0:0:0:1:65130] Decreasing pending responses, now 0
17:35:05.252 [reactor-http-nio-2] DEBUG reactor.netty.http.server.HttpServerOperations - [09cda6a3-1, L:/0:0:0:0:0:0:0:1:65129 - R:/0:0:0:0:0:0:0:1:65130] Last HTTP packet was sent, terminating the channel
17:35:05.253 [reactor-http-nio-2] DEBUG org.springframework.web.server.adapter.HttpWebHandlerAdapter - [09cda6a3-1] Completed 200 OK
17:35:05.256 [reactor-http-nio-2] DEBUG reactor.netty.http.server.HttpServerOperations - [09cda6a3-1, L:/0:0:0:0:0:0:0:1:65129 - R:/0:0:0:0:0:0:0:1:65130] Last HTTP response frame
17:35:05.488 [reactor-http-nio-2] DEBUG reactor.netty.http.server.HttpServerOperations - [09cda6a3, L:/0:0:0:0:0:0:0:1:65129 - R:/0:0:0:0:0:0:0:1:65130] Increasing pending responses, now 1
17:35:05.488 [reactor-http-nio-2] DEBUG reactor.netty.http.server.HttpServer - [09cda6a3-2, L:/0:0:0:0:0:0:0:1:65129 - R:/0:0:0:0:0:0:0:1:65130] Handler is being applied: org.springframework.http.server.reactive.ReactorHttpHandlerAdapter@3bc10f7a
17:35:05.488 [reactor-http-nio-2] DEBUG org.springframework.web.server.adapter.HttpWebHandlerAdapter - [09cda6a3-2] HTTP GET "/favicon.ico"
17:35:05.494 [reactor-http-nio-2] DEBUG org.springframework.web.server.handler.ResponseStatusExceptionHandler - [09cda6a3-2] Resolved [ResponseStatusException: "404 NOT_FOUND "No matching router function""] for HTTP GET /favicon.ico
17:35:05.494 [reactor-http-nio-2] DEBUG org.springframework.web.server.adapter.HttpWebHandlerAdapter - [09cda6a3-2] Completed 404 NOT_FOUND
17:35:05.494 [reactor-http-nio-2] DEBUG reactor.netty.http.server.HttpServerOperations - [09cda6a3-2, L:/0:0:0:0:0:0:0:1:65129 - R:/0:0:0:0:0:0:0:1:65130] Last HTTP response frame
17:35:05.494 [reactor-http-nio-2] DEBUG reactor.netty.http.server.HttpServerOperations - [09cda6a3-2, L:/0:0:0:0:0:0:0:1:65129 - R:/0:0:0:0:0:0:0:1:65130] No sendHeaders() called before complete, sending zero-length header
17:35:05.494 [reactor-http-nio-2] DEBUG reactor.netty.http.server.HttpServerOperations - [09cda6a3-2, L:/0:0:0:0:0:0:0:1:65129 - R:/0:0:0:0:0:0:0:1:65130] Decreasing pending responses, now 0
17:35:05.494 [reactor-http-nio-2] DEBUG reactor.netty.http.server.HttpServerOperations - [09cda6a3-2, L:/0:0:0:0:0:0:0:1:65129 - R:/0:0:0:0:0:0:0:1:65130] Last HTTP packet was sent, terminating the channel
17:35:05.495 [reactor-http-nio-2] DEBUG reactor.netty.channel.ChannelOperationsHandler - [09cda6a3, L:/0:0:0:0:0:0:0:1:65129 - R:/0:0:0:0:0:0:0:1:65130] No ChannelOperation attached. Dropping: EmptyLastHttpContent

瀏覽器輸入:http://localhost:65129/users

返回[{"id":1,"name":"劉備"},{"id":2,"name":"曹操"},{"id":3,"name":"孫權(quán)"}]

到此這篇關(guān)于Spring 零基礎(chǔ)入門WebFlux框架體系的文章就介紹到這了,更多相關(guān)Spring WebFlux內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 華為鴻蒙系統(tǒng)應(yīng)用開發(fā)工具 DevEco Studio的安裝和使用圖文教程

    華為鴻蒙系統(tǒng)應(yīng)用開發(fā)工具 DevEco Studio的安裝和使用圖文教程

    HUAWEI DevEco Studio 是華為消費(fèi)者業(yè)務(wù)為開發(fā)者提供的集成開發(fā)環(huán)境(IDE),旨在幫助開發(fā)者快捷、方便、高效地使用華為EMUI開放能力。這篇文章主要介紹了華為鴻蒙系統(tǒng)應(yīng)用開發(fā)工具 DevEco Studio的安裝和使用圖文教程,需要的朋友可以參考下
    2021-04-04
  • 在SpringBoot項(xiàng)目中解決依賴沖突問題的方法

    在SpringBoot項(xiàng)目中解決依賴沖突問題的方法

    在SpringBoot項(xiàng)目中,依賴沖突是一個(gè)常見的問題,特別是當(dāng)項(xiàng)目引入多個(gè)第三方庫或框架時(shí),依賴沖突可能導(dǎo)致編譯錯(cuò)誤、運(yùn)行時(shí)異?;虿豢深A(yù)測(cè)的行為,本文給大家介紹了如何在SpringBoot項(xiàng)目中解決以來沖突問題的方法,需要的朋友可以參考下
    2024-01-01
  • 詳解Springboot自定義異常處理

    詳解Springboot自定義異常處理

    本篇文章主要介紹了詳解Springboot自定義異常處理,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-04-04
  • 使用filter實(shí)現(xiàn)url級(jí)別內(nèi)存緩存示例

    使用filter實(shí)現(xiàn)url級(jí)別內(nèi)存緩存示例

    這篇文章主要介紹了使用filter實(shí)現(xiàn)url級(jí)別內(nèi)存緩存示例,只需要一個(gè)靜態(tài)類,在filter中調(diào)用,也可以全部寫到filt里面??梢愿鶕?jù)查詢參數(shù)分別緩存,需要的朋友可以參考下
    2014-03-03
  • Java的RocketMq水平擴(kuò)展及負(fù)載均衡詳解

    Java的RocketMq水平擴(kuò)展及負(fù)載均衡詳解

    這篇文章主要介紹了Java的RocketMq水平擴(kuò)展及負(fù)載均衡詳解,RocketMQ是一個(gè)分布式具有高度可擴(kuò)展性的消息中間件,本文旨在探索在broker端,生產(chǎn)端,以及消費(fèi)端是如何做到橫向擴(kuò)展以及負(fù)載均衡的,需要的朋友可以參考下
    2024-01-01
  • 從dubbo zookeeper注冊(cè)地址提取出zookeeper地址的方法

    從dubbo zookeeper注冊(cè)地址提取出zookeeper地址的方法

    今天小編就為大家分享一篇關(guān)于從dubbo zookeeper注冊(cè)地址提取出zookeeper地址的方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • 利用Java編寫一個(gè)出敬業(yè)福的小程序

    利用Java編寫一個(gè)出敬業(yè)福的小程序

    新年將至,又開始掃?;顒?dòng),每年的敬業(yè)福成了大家難過的坎。所以本文將介紹一個(gè)通過Java編寫的一款福字生成器,感興趣的小伙伴可以試一試
    2022-01-01
  • java 中HashCode重復(fù)的可能性

    java 中HashCode重復(fù)的可能性

    這篇文章主要介紹了java 中HashCode重復(fù)的可能性的相關(guān)資料,這里提供實(shí)例及測(cè)試代碼,需要的朋友可以參考下
    2017-07-07
  • why在重寫equals時(shí)還必須重寫hashcode方法分享

    why在重寫equals時(shí)還必須重寫hashcode方法分享

    首先我們先來看下String類的源碼:可以發(fā)現(xiàn)String是重寫了Object類的equals方法的,并且也重寫了hashcode方法
    2013-10-10
  • Java中的命名與目錄接口JNDI基本操作方法概覽

    Java中的命名與目錄接口JNDI基本操作方法概覽

    這篇文章主要介紹了Java中的命名與目錄接口JNDI基本操作方法概覽,JNDI提供統(tǒng)一的客戶端API使得Java應(yīng)用程序可以和這些命名服務(wù)和目錄服務(wù)之間進(jìn)行交互,需要的朋友可以參考下
    2016-03-03

最新評(píng)論