Maison >Java >javaDidacticiel >Comment implémenter le démarrage aléatoire du port SpringBoot
Le port aléatoire peut trouver automatiquement les ports qui peuvent être utilisés dans la plage spécifiée. Il n'est pas nécessaire de spécifier un port de démarrage fixe dans le fichier de configuration
Pour. Par exemple, si nécessaire dans SpringBoot Pour exécuter plusieurs instances, il est difficile de modifier le fichier de configuration séparément. Le principe du port aléatoire est d'établir une connexion avec le port socket correspondant. S'il peut se connecter, il a été utilisé. n'a pas été utilisé. Vérification du port obtenue au hasard Après utilisation, il peut être écrit dans la mémoire via System.setProperty("property name", port); port, il n'est pas nécessaire de spécifier le port dans le fichier de configuration. , sinon vous devez configurer server.port=${property name}
Cette pratique est basée sur le projet ordinaire SpringBoot, créez simplement l'échafaudage du projet directement
[astuce] Par exemple, dans le projet SpringCloud, le fournisseur de services peut utiliser des ports aléatoires Démarrez rapidement plusieurs services sans modifier les fichiers de configuration séparément, puis les redémarrer
c Si tous les ports sont indisponibles, une erreur sera générée directement et l'opération sera interrompue
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; } }Créez
StartCommand.java
Command. classe, appelez la fonction de port aléatoire pour obtenir les informations sur le port, puis écrivez les informations sur le port dans l'environnement en cours d'exécutionimport 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); } }
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); } }
Spécifiez le port dans le fichier de configuration sous forme d'informations de port générées aléatoirementServerPortUtil .java
端口工具类,使用socket连接指定端口,例如有以下条件
a. 指定端口范围为8000-65535
b. 识别端口是否使用,已被使用则继续随机产生
c. 如果全部端口不可使用则直接抛出错误,中断运行
server: # 随机端口配置 port: ${auto.port}
创建StartCommand.java
rrreee
Le test du projet démarre le projet normalement et vous pouvez voir les informations sur le port démarré dans la console
2. Opération multi-instance SpringBoot
L'opération multi-instance SpringBoot est configurée comme suit dans IDEAEnsuite, démarrez l'exécution/le débogage au démarrage
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!