Port rawak boleh mencari port yang boleh digunakan secara automatik dalam julat yang ditentukan dan tidak perlu dinyatakan dalam fail konfigurasi Membetulkan port permulaan
Sebagai contoh, jika anda perlu menjalankan berbilang kejadian dalam SpringBoot, adalah menyusahkan untuk mengubah suai fail konfigurasi secara berasingan
Port rawak Prinsipnya adalah untuk mewujudkan sambungan dengan port soket yang sepadan Jika ia boleh disambungkan, ia telah digunakan
Yang diperolehi secara rawak port boleh digunakan untuk pengesahan melalui System.setProperty("Property Name" , tulis ke memori, dan kemudian anda boleh mendapatkan
dalam fail konfigurasi ialah server.port, anda tidak perlu menentukan port dalam fail konfigurasi, jika tidak, anda perlu mengkonfigurasinya server.port=${property name}
Amalan ini berdasarkan. pada projek biasa SpringBoot, anda boleh terus mencipta perancah projek
[tip] Contohnya Dalam projek SpringCloud, pembekal perkhidmatan boleh menggunakan port rawak untuk memulakan berbilang perkhidmatan dengan cepat tanpa perlu ubah suai fail konfigurasi secara individu sebelum memulakan
Buat kelas alat port ServerPortUtil .java
dan gunakan soket untuk menyambung ke port yang ditentukan. Sebagai contoh, syarat berikut dipenuhi
a Julat port yang ditentukan ialah 8000-65535
b Kenal pasti sama ada port sedang digunakan atau tidak jana
c. Jika semua port tidak tersedia, ralat akan dilemparkan terus, dan operasi akan terganggu
import java.net.InetAddress; import java.net.Socket; import java.util.Random; public class ServerPortUtil { private static final int MAX_PORT = 65535; private static final int MIN_PORT = 8000; public static String getAvailablePort() { Random random = new Random(); // 最大尝试次数为端口范围 int maxRetryCount = MAX_PORT - MIN_PORT; while (maxRetryCount > 0) { // 指定范围内随机端口,随便写的算法,根据自己需要调整 int port = random.nextInt(MAX_PORT - MIN_PORT) + MIN_PORT; boolean isUsed = isLocalePortUsing(port); if (!isUsed) { return String.valueOf(port); } --maxRetryCount; } System.out.println("系统暂无端口可用,运行结束"); System.exit(1); return null; } /** * 检查给定端口是否可用 * * @author tianxincode@163.com * @since 2020/10/14 */ public static boolean isLocalePortUsing(int port) { try { // 建立一个Socket连接, 如果该端口还在使用则返回true, 否则返回false, 127.0.0.1代表本机 new Socket(InetAddress.getByName("127.0.0.1"), port); return true; } catch (Exception e) { // 异常说明端口连接不上,端口能使用 } return false; } }
akan mencipta kelas arahan StartCommand.java
, panggil fungsi port rawak untuk mendapatkan. maklumat port, dan kemudian tulis maklumat port Masukkan persekitaran berjalan
a Jika parameter masuk mengandungi port, gunakan yang ditentukan, jika tidak gunakan
import com.codecoord.randomport.util.ServerPortUtil; import org.springframework.util.StringUtils; public class StartCommand { /** * 端口属性名称,如果名称为server.port则在配置文件中不用指定,否则需要指定为此处配置的名称,如${auto.port} */ private static final String SERVER_PORT = "auto.port"; public StartCommand(String[] args) { boolean isServerPort = false; String serverPort = ""; if (args != null) { for (String arg : args) { if (StringUtils.hasText(arg) && arg.startsWith("--server.port" )) { isServerPort = true; serverPort = arg; break; } } } String port; if (isServerPort) { port = serverPort.split("=")[1]; } else { port = ServerPortUtil.getAvailablePort(); } System.out.println("Current project port is " + port); System.setProperty(SERVER_PORT, port); } }
Tulis maklumat port ke persekitaran secara automatik. sebelum memulakan kelas permulaan
import com.codecoord.randomport.config.StartCommand; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplicatio public class SpringbootRandomPortApplication { public static void main(String[] args) { // 写入端口信息 new StartCommand(args); SpringApplication.run(SpringbootRandomPortApplication.class, args); } }
Port yang ditentukan dalam fail konfigurasi adalah maklumat port yang dijana secara rawak
server: # 随机端口配置 port: ${auto.port}
Ujian projek memulakan projek secara normal, dan anda boleh melihat maklumat port yang dimulakan dalam konsol
Kemudian jalankan/nyahpepijat pada permulaan
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan permulaan port rawak SpringBoot. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!