Ich führe zwei Web-Anwendungen im Tomat-Host-Prozess aus, was meiner Meinung nach zwei separate Programme haben sollte, eines für jede Anwendung.Separate JVM-Eigenschaften für jedes Java-Programm auf derselben JVM
Eine andere Sache ist, beide Apps haben eine JVM-Eigenschaft verwendet, die ich App-spezifisch sein möchte.
//common-service library used in both web-apps
public class CommonService {
private static Logger logger = LogManager.getLogger(CommonService.class);
static {
String uuid = UUID.randomUUID().toString();
logger.debug("CommonService initialization for {}" , uuid);
System.setProperty("key1", "value1-"+ uuid);
}
}
Als ich implementieren die Kriege für jede App und sehen den Wert für key1
Eigenschaft es durch die zweite Anwendung geladen außer Kraft gesetzt wird.
Als ich hier zeigen, wenn app1 geladen wird, wird der Wert für die Eigenschaft key1
wenn app2 geladen wird, wird der Wert für die Eigenschaft key1
Aber nach app2 ist geladen, es überschreibt key1
für app1.
Der Code für oben ist ziemlich einfach,
public class Service1Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
CommonService commonService = new CommonService();
System.out.println("Service1 key1= " + System.getProperty("key1"));
PrintWriter out = resp.getWriter();
out.println("<html>");
out.println("<body>");
out.println("<h1>" + System.getProperty("key1")+ "</h1>");
out.println("</body>");
out.println("</html>");
}
}
So scheint es, ich kann JVM nur in einzelnen JVM globale Parameter haben, aber ich habe mehrere Dienste auf meinem Server läuft, auf dem Jeder Dienst muss einen eigenen Satz von JVM-Parametern haben, auf deren Basis ein anderes API die JVM-Eigenschaft tatsächlich verwendet.
nicht sicher, was Sie wirklich fragen ... aber es vielleicht würde helfen, wenn Ihre Dienste nicht die Systemeigenschaften verwenden würden, sondern sich auf unterschiedliche Eigenschaftendateien verlassen würden; vielleicht hilft das: http://stackoverflow.com/questions/12280787/reading-properties-from-tomcat? – GhostCat
'Eigenschaften für jeden Java-Prozess auf derselben JVM' JVM ist ein Prozess (ohne LWP). Es gibt so etwas wie mehr Prozesse auf einer JVM – rkosegi
Das ist richtig, Systemeigenschaften sind per JVM - Sie suchen etwas auf Anwendungsebene –