1. Java网络编程
- Server端
package com.jt.common.net;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Tomcat {
public static void main(String[] args) throws IOException {
//1.创建服务
ServerSocket server = new ServerSocket(9999);
System.out.println("server start ...");
//2.启动服务监听
while(true) {
//监听客户端的链接
Socket socket = server.accept(); //阻塞方法
System.out.println("连接已建立");
//创建输出流对象,向客户端输出hello client
OutputStream out = socket.getOutputStream();
byte[] responseContent = ("HTTP/1.1 200 ok \r\n" +
"Content-Type:text/html;charset=utf-8 \r\n" +
"\r\n" +
"<h2>hello client</h2>").getBytes();
out.write(responseContent);
out.flush();
}
}
}
- Browser端
package com.jt.common.net;
import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;
/**
* 模拟浏览器
*/
public class Browser {
public static void main(String[] args) throws IOException {
//1. 创建网络编程中的客户端对象(Socket)
Socket socket = new Socket("127.0.0.1", 9999);
//2. 创建输入流对象,读取服务端写到客户端的数据
InputStream in = socket.getInputStream();
byte[] buf = new byte[1024];
int len = in.read(buf);
String content = new String(buf, 0, len);
System.out.println(content);
//3. 释放资源
socket.close();
}
}
2. 配置中心
2.1. 修改application.yml
spring:
application:
name: sca-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848
config:
server-addr: localhost:8848 #定义配置中心地址
file-extension: yml #定义配置中心配置的格式
2.2 添加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2.3 配置中心增加配置
2.4 修改配置文件名称
resource / application.yml => resource / bootstrap.yml
2.5 控制器
package com.jt.provider.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 基于此Controller演示配置中心的作用,
* 在这个Controller中我们会基于日志对象
* 进行日志输出测试
*/
@RefreshScope //告诉系统底层,配置中心内容发生变化,重新构建此对象
@RestController
public class ProviderLogController {
//假如在log对象所在的类上使用了@Slf4j,log不需要我们手动创建,lombok会帮我们创建
private static Logger log = LoggerFactory.getLogger(ProviderLogController.class);
@GetMapping("/provider/log/doLog01")
public String doLog01() {
//trace < debug < info < warn < error
log.trace("===trace===");
log.debug("===debug===");
log.info("===info===");
log.warn("===warn===");
log.error("===error===");
return "log config test";
}
public ProviderLogController() {
System.out.println("==ProviderLogController()==");
}
@Value("${logging.level.com.jt}")
private String logLevel;
@GetMapping("/provider/log/doLog02")
public String doLog02() {
log.info("log.level is {}", logLevel); //这里的{}表示占位符
return "log level is " + logLevel;
}
}
@RefreshScope 注解的作用是在配置中心的相关配置发生变化以后,
能够及时看到类中属性值的更新