在以前的項目中對於一些資源的配置基本上都是通過spring的IOC注入一個目錄的地址字符串而這樣的問題是對於開發中的團隊來說還是很有問題的因為每個可能都配置一個不同的本地目錄而發布到服務器之後又有不同的目錄這樣造成每個人提交了配置文件之後其他人都可能需要修改配置文件才能正確啟動服務這確實很令人煩勞
最近看《Professional Java Development with the Spring Framework》時看到了spring對底層資源的抽象才找到了完美解決方案
原來的代碼
private String templatePath;
public void setTemplatePath(String templatePath) {
this
templatePath = templatePath;
}
public void initListener() {
TemplateEventListener templateListener = new TemplateEventListener(){
public void handleTemplateEvent(TemplateEventSupport evt) {
// 添加事件到隊列中
queue
offer(evt);
if(log
isDebugEnabled()){
log
debug(
Add Template about:
+ evt
getTemplateName());
}
}
};
//注冊模版監聽事件
templateManager
addEventListener(Constants
TEMPLATE_SAVE_EVENT
templateListener
false);
//設置freemarker的參數
freemarkerCfg = new Configuration();
try {
freemarkerCfg
setDirectoryForTemplateLoading(new File(templatePath));
freemarkerCfg
setObjectWrapper(new DefaultObjectWrapper());
freemarkerCfg
setDefaultEncoding(
UTF
);
} catch (IOException ex) {
throw new SystemException(
No Directory found
please check you config
);
}
}配置文件


<bean id=
buildHtmlService
class=
cn
jdk
leaf
service
impl
BuildHtmlServiceImpl
init
method=
initListener
>

<property name=
templatePath
><value>${templatePath}</value></property>

</bean>
templatePath
path=D:/template使用spring對底層資源的抽象只要把templatePath改成Resource就可以了
private Resource templatePath;
public void setTemplatePath(Resource templatePath) {
this
templatePath = templatePath;
}
public void initListener() {
TemplateEventListener templateListener = new TemplateEventListener(){
public void handleTemplateEvent(TemplateEventSupport evt) {
// 添加事件到隊列中
queue
offer(evt);
if(log
isDebugEnabled()){
log
debug(
Add Template about:
+ evt
getTemplateName());
}
}
};
//注冊模版監聽事件
templateManager
addEventListener(Constants
TEMPLATE_SAVE_EVENT
templateListener
false);
//設置freemarker的參數
freemarkerCfg = new Configuration();
try {
freemarkerCfg
setDirectoryForTemplateLoading(templatePath
getFile());
freemarkerCfg
setObjectWrapper(new DefaultObjectWrapper());
freemarkerCfg
setDefaultEncoding(
UTF
);
} catch (IOException ex) {
throw new SystemException(
No Directory found
please check you config
);
}
}bean的配置不變
只要修改properties文件就可以了
<bean id=
buildHtmlService
class=
cn
jdk
leaf
service
impl
BuildHtmlServiceImpl
init
method=
initListener
>
<property name=
templatePath
><value>${templatePath}</value></property>
</bean>把properties文件修改成
templatePath
path=template在webcontext目錄下面建立一個template目錄就可以了
在部署到服務器的時候需要部署到一個特定的目錄只要修改這個配置文件為
templatePath
path=file:/D:/template這樣就可以了
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28356.html