package Ġse . sv t . util . spring Ċ Ċ import Ġorg . springframework . context . ApplicationContext Initializer Ċ import Ġorg . springframework . context . Configurable ApplicationContext Ċ import Ġorg . springframework . core . env . Property Source Ċ import Ġorg . springframework . core . env . Standard Environment Ċ import Ġorg . springframework . util . Socket Utils Ċ import Ġjava . util . concurrent . Concurrent HashMap Ċ Ċ class ĠRandom Port Initializer Ġ: ĠApplication Context Initializer < Configurable ApplicationContext > Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġinitialize ( application Context : ĠConfigur able ApplicationContext ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġapplication Context . environment . property Sources ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add After ( Standard Environment . SYSTEM _ ENVIRONMENT _ PROPERTY _ SOURCE _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRandom Port Property Source ( RANDOM _ PORTS _ PROPERTY _ SOURCE _ NAME )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ val ĠR AN DOM _ PORTS _ PROPERTY _ SOURCE _ NAME Ġ= Ġ" random Ports " Ċ Ċ val ĠR AN DOM _ PORTS _ PROPERTY _ SOURCE _ PREFIX Ġ= Ġ" random - port ." Ċ Ċ class ĠRandom Port Property Source ( name : ĠString ) Ġ: ĠProperty Source < Any >( name ) Ġ{ ĊĊĠĠĠ Ġval Ġports Ġ= ĠConcurrent HashMap < String , ĠInt >() ĊĊĠĠĠ Ġoverride Ġfun ĠgetProperty ( name : ĠString ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Ġ! Ġthis . is Random Port Property ( name )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġports . compute If Absent ( name ) Ġ{ Ġ_ Ġ-> ĠSocket Utils . find Available Tcp Port () Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcontains Property ( name : ĠString ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġis Random Port Property ( name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġis Random Port Property ( name : ĠString ) Ġ= ĊĠĠĠĠĠĠĠ Ġname . startsWith ( RANDOM _ PORTS _ PROPERTY _ SOURCE _ PREFIX ) Ġ&& Ġname . length Ġ> ĠR AN DOM _ PORTS _ PROPERTY _ SOURCE _ PREFIX . length Ċ } Ċ