Czarny Młot
Czarny Młot
Czarny Lew
Pytanie po co tak? Singleton bean żyje przez cały czas działania aplikacji (uproszczenie patrz konfiguracja inicjalizatorów) i JEST TYLKO JEDEN. Prototype bean żyje w określonym czasie i JEST ICH DUŻO. Zatem jak jesteś wstanie stwierdzić czy w jednej jedynej instancji singletona już czas podmienić pole na kolejny prototyp, czy jeszcze należy poczekać?
ps. beany można każdorazowo pobierać z kontekstu i wtedy to zaczyna mieć sens.
Biały Mleczarz
No pewnie to jest zly trop.
Moj problem jest taki, ze to beany z rest clientami. Potrzebuje im co jakis, dynamicznie podawac im urle gdzie maja callowac , odswiezac .
I zastanawiam sie jak najlepiej to robic.
Biały Mleczarz
Nie moge.
Mamy microservices i rozne srodowiska. Jest sobie tez service discovery w ktorym appki sie rejestruja i moze podawac linki dla odpowiedniego srodowiska. Appki sa w stanie cachowac ta informacje. Potrzebne im te urle, zeby wiedzirc gdzie leza inne serwisy.
Wczesniej mielismy to podane w pliku a rest clienty \ ich beany byly tworzone z odpowiednimi adresami przy starcie aplikacji.
Ale teraz chcialbym moc odswiezac linki do odpowiednich aplikacji.
Czarny Młot
Jeżeli zatem masz jakiś serwis w którym klienci rejestrują się to można zrobić tak, że w tym serwisie trzymasz mapę z URLami do klientów, a następnie w tworzysz beany za pomocą np. kontekstu:
Client client = applicationContext.getBean(Client.class, urls.get("clientName"));
i zabijasz go na końcu metody. Czy to jest wydajne? Jeżeli nadal kilka rzędów wielkości szybsze niż komunikacja po sieci (chyba, że masz specjalizowany sprzęt z 10Gbit ethernet w ramach łączenia szaf). Można to dodatkowo przyozdobić jakimiś WeakHashMapami, które będą robić za cache.