मैं अपने सर्वलेट कंटेनर को पुन: प्रारंभ बिना स्प्रिंग विन्यास फाइल कैसे ताज़ा कर सकते हैं पुन: प्रारंभ करने के बिना स्प्रिंग विन्यास फाइल रिफ्रेशिंग?पुन: लोड/सर्वलेट कंटेनर
मैं JRebel के अलावा किसी अन्य समाधान के लिए देख रहा हूँ।
मैं अपने सर्वलेट कंटेनर को पुन: प्रारंभ बिना स्प्रिंग विन्यास फाइल कैसे ताज़ा कर सकते हैं पुन: प्रारंभ करने के बिना स्प्रिंग विन्यास फाइल रिफ्रेशिंग?पुन: लोड/सर्वलेट कंटेनर
मैं JRebel के अलावा किसी अन्य समाधान के लिए देख रहा हूँ।
मैं आपको ऐसा करने की सलाह नहीं दूंगा। आप सिंगलटन बीन्स के साथ क्या होने की उम्मीद करते हैं, जिनकी कॉन्फ़िगरेशन संशोधित होती है? क्या आप सभी सिंगलेट्स को फिर से लोड करने की उम्मीद करते हैं? लेकिन कुछ ऑब्जेक्ट्स उस सिंगलेट्स के संदर्भ रख सकते हैं।
इस पोस्ट के साथ-साथ Automatic configuration reinitialization in Spring
खैर देखें, आपके ऐप का परीक्षण करते हुए इस तरह के एक संदर्भ पुनः लोड प्रदर्शन करने के लिए उपयोगी हो सकता है।
आप refresh
AbstractRefreshableApplicationContext
कक्षा में से किसी एक की विधि का प्रयास कर सकते हैं: यह आपके पहले प्रत्याशित बीन्स को रीफ्रेश नहीं करेगा, लेकिन संदर्भ पर अगली कॉल रीफ्रेश किए गए सेम लौटाएगी।
import java.io.File;
import java.io.IOException;
import org.apache.commons.io.FileUtils;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class ReloadSpringContext {
final static String header = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<!DOCTYPE beans PUBLIC \"-//SPRING//DTD BEAN//EN\"\n" +
" \t\"http://www.springframework.org/dtd/spring-beans.dtd\">\n";
final static String contextA =
"<beans><bean id=\"test\" class=\"java.lang.String\">\n" +
"\t\t<constructor-arg value=\"fromContextA\"/>\n" +
"</bean></beans>";
final static String contextB =
"<beans><bean id=\"test\" class=\"java.lang.String\">\n" +
"\t\t<constructor-arg value=\"fromContextB\"/>\n" +
"</bean></beans>";
public static void main(String[] args) throws IOException {
//create a single context file
final File contextFile = File.createTempFile("testSpringContext", ".xml");
//write the first context into it
FileUtils.writeStringToFile(contextFile, header + contextA);
//create a spring context
FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext(
new String[]{contextFile.getPath()}
);
//echo the bean 'test' on stdout
System.out.println(context.getBean("test"));
//write the second context into it
FileUtils.writeStringToFile(contextFile, header + contextB);
//refresh the context
context.refresh();
//echo the bean 'test' on stdout
System.out.println(context.getBean("test"));
}
}
और आप इस परिणाम
fromContextA
fromContextB
एक और तरीका यह (और शायद एक और अधिक सरल एक) को प्राप्त करने (स्प्रिंग 2.5+ गतिशील भाषा के साथ की रीफ्रेश बीन सुविधा ग्रूवी उपयोग करने के लिए है मिलता है, आदि) और वसंत आप अपने बीन व्यवहार भी बदल सकते हैं। spring reference for dynamic language पर एक नज़र डालें:
24.3.1.2। रीफ्रेश सेम
में से एक (यदि नहीं) सबसे सम्मोहक मूल्य वसंत में गतिशील भाषा समर्थन की कहते हैं 'रीफ्रेश सेम' सुविधा है।
रीफ्रेश सेम एक गतिशील भाषा समर्थित सेम है कि विन्यास की एक छोटी राशि, एक गतिशील भाषा समर्थित सेम उसके अंतर्निहित स्रोत फ़ाइल संसाधन में देखरेख बदलाव, और फिर खुद को फिर से लोड कर सकते हैं साथ जब गतिशील भाषा स्रोत फ़ाइल (उदाहरण के के लिए जब एक डेवलपर संपादन और फाइल सिस्टम पर फाइल करने के लिए परिवर्तनों को सहेजता है) बदल गया है।
आप इस http://www.wuenschenswert.net/wunschdenken/archives/138 पर एक नज़र डाल सकते हैं, जहां एक बार जब आप गुण फ़ाइल में कोई चीज़ बदलते हैं और इसे सहेजते हैं तो बीन्स को नए मानों के साथ पुनः लोड किया जाएगा।
अधिक हाल ही में इस पर ठोकर उन लोगों के लिए - इस समस्या को हल करने के लिए वर्तमान और आधुनिक तरीका Spring Boot's Cloud Config उपयोग करने के लिए है।
बस अपने रीफ्रेशेबल बीन्स और @EnableConfigServer पर अपने मुख्य/कॉन्फ़िगरेशन पर @RefreshScope एनोटेशन जोड़ें।
तो, उदाहरण के लिए, इस नियंत्रक वर्ग:
@RefreshScope
@RestController
class MessageRestController {
@Value("${message}")
private String message;
@RequestMapping("/message")
String getMessage() {
return this.message;
}
}
अपने message
स्ट्रिंग संपत्ति के नए मूल्य /message
अंत बिंदु जब भी आपके विन्यास अद्यतन किया जाता है के लिए वापस आ जाएगी।
अधिक कार्यान्वयन विवरण के लिए आधिकारिक Spring Guide for Centralized Configuration उदाहरण देखें।
यह https://github.com/Unicon/springframework-addons/wiki/Auto-reloading-properties-files – Vadzim
अपडेट किए गए लिंक पर अनुकूलित किया गया था: http://maven-repository.com/artifact/net.unicon। springframework/springframework-addons/0.1, https://github.com/UniconLabs/springframework-addons/blob/master/src/main/java/net/unicon/springframework/addons/properties/ReloadingPropertyPlaceholderConfigurer.java, https: // github.com/knightliao/disconf/blob/master/disconf-client/src/main/java/com/baidu/disconf/client/addons/properties/ReloadingPropertyPlaceholderConfigurer.java – Vadzim