首先你可以使用輸入輸出流(或者你說的可能是要用反射得到程序結(jié)果來解析)解析做出*.Java文件。
成都創(chuàng)新互聯(lián)公司專注于中大型企業(yè)的網(wǎng)站設(shè)計制作、網(wǎng)站建設(shè)和網(wǎng)站改版、網(wǎng)站營銷服務(wù),追求商業(yè)策劃與數(shù)據(jù)分析、創(chuàng)意藝術(shù)與技術(shù)開發(fā)的融合,累計客戶近千家,服務(wù)滿意度達(dá)97%。幫助廣大客戶順利對接上互聯(lián)網(wǎng)浪潮,準(zhǔn)確優(yōu)選出符合自己需要的互聯(lián)網(wǎng)運用,我們將一直專注成都品牌網(wǎng)站建設(shè)和互聯(lián)網(wǎng)程序開發(fā),在前進的路上,與客戶一起成長!
然后可以使用runtime調(diào)用Dos下的java編譯命令編譯取得class文件。
然后使用classloader,反射等組合執(zhí)行生成的class文件。
可以用線程來做,每隔幾秒開一個線程
代碼如下
public void runTask() {
final long timeInterval = 120000;// 兩分鐘運行一次
final ThreadService threadService = new ThreadService();
Runnable runnable = new Runnable() {
public void run() {
while (true) {
// ------- code for task to run
//你要運行的程序
// ------- ends here
try {
Thread.sleep(timeInterval);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
Thread thread = new Thread(runnable);
thread.start();
}
Web容器啟動后執(zhí)行代碼的幾種方式
其執(zhí)行順序為:
4===5===1===2===3
即指定init-method的Bean開始執(zhí)行
接著實現(xiàn)spring的Bean后置處理器開始執(zhí)行
然后是Servlet的監(jiān)聽器執(zhí)行
再接下來是Servlet的過濾器執(zhí)行
最后才是Servlet執(zhí)行
1、實現(xiàn)Servlet監(jiān)聽器接口ServletContextListener
[java] view plain copy
public class InitListener implements ServletContextListener {
@Override
public void contextDestroyed(ServletContextEvent context) {
}
@Override
public void contextInitialized(ServletContextEvent context) {
// 上下文初始化執(zhí)行
System.out.println("================[ServletContextListener]自動加載啟動開始.");
SpringUtil.getInstance().setContext(
span style="white-space:pre" /spanWebApplicationContextUtils.getWebApplicationContext(arg0.getServletContext())
span style="white-space:pre" /span);
}
}
然后在web.xml文件配置該監(jiān)聽器
[html] view plain copy
listener
listener-classcom.test.init.InitListener/listener-class
/listener
2、實現(xiàn)Servlet的過濾器Filter
[html] view plain copy
public class InitFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException,
ServletException {
}
@Override
public void init(FilterConfig config) throws ServletException {
System.out.println("================[Filter]自動加載啟動開始.");
// 讀取Spring容器中的Bean[此時Bean已加載,可以使用]
//寫啟動需要執(zhí)行的代碼
System.out.println("================[Filter]自動加載啟動結(jié)束.");
}
}
然后在web.xml文件配置過濾器即可
[html] view plain copy
filter
filter-nameInitFilter/filter-name
filter-classcom.test.init.InitFilter/filter-class
/filter
filter-mapping
filter-nameInitFilter/filter-name
url-pattern//url-pattern
/filter-mapping
3、編寫一個Servlet,在web.xml里面配置容器啟動后執(zhí)行即可
[html] view plain copy
public class InitServlet extends HttpServlet {
/**
*/
private static final long serialVersionUID = 1L;
@Override
public void init(ServletConfig config) {
try {
super.init();
} catch (ServletException e) {
e.printStackTrace();
}
System.out.println("================[Servlet]自動加載啟動開始.");
// 讀取Spring容器中的Bean[此時Bean已加載,可以使用]
//執(zhí)行想要的代碼
System.out.println("================[Servlet]自動加載啟動結(jié)束.");
}
}
然后在web.xml文件配置該Servlet的啟動方式為:容器啟動后執(zhí)行
servlet
servlet-nameInitServlet/servlet-name
servlet-classcom.test.init.InitServlet/servlet-class
init-param
param-nameusername/param-name
param-valuetest/param-value
/init-param
!-- 此處指定加載順序為2,表明還有優(yōu)先級更高的Servlet要先執(zhí)行 --
load-on-startup2/load-on-startup
/servlet
servlet-mapping
servlet-nameInitServlet/servlet-name
url-pattern//url-pattern
/servlet-mapping
關(guān)于啟動后執(zhí)行,由load-on-startup指定:
(1)當(dāng)值為0或者大于0時,表示容器在應(yīng)用啟動時就加載這個servlet。值越小,啟動優(yōu)先級越高;
(2)當(dāng)是一個負(fù)數(shù)時或者沒有指定時,表示該servlet被調(diào)用時才加載。
4、如果你使用Spring IOC作為Bean管理容器,那么可以指定init-method其中init-method表示bean加載成功后,立即執(zhí)行某個方法。配置如下:start為要執(zhí)行的方法名稱
[html] view plain copy
!-- service --
bean id="shopService" class="com.test.teach.service.ShopService" span style="color:#33ffff;"init-method="start"/span
property name="shopDao" ref="shopDao" /
/bean