1. 程式人生 > >spring boot入門之——熱部署

spring boot入門之——熱部署

配置 xtend java類 throw not catch arr 直接 路徑

場景:

  • 本地調試(頻繁的啟動/停止服務器)

  • 線上發布(每次都需要啟動/停止服務器)


優點:

  • 無論本地還是線上,都適用

  • 無需重啟服務器,提高開發、調試效率;提升發布、運維效率,降低運維成本

技術分享圖片

java實現熱部署有哪幾種方式?

  • 通過配置tomcat,直接把項目放在webapps裏。

  • 在tomcat\conf\server.xml中的<host></host>中添加<context debug="0" docBase="" path="" privileged="true" reloadable="true"/>標簽

  • 在tomcat\conf\Catalina\localhost中添加xml,關鍵屬性<context docBase="" reloadable="true" />


技術分享圖片

實現一個Java類熱加載的實例

//自定義類加載器,需實現findClass方法(核心類)
public class MyClassLoader extends ClassLoader {
	
	//定義加載的路徑
	private String classPath;
	
	public MyClassLoader(String classPath) {
		//調用父類的加載器
		super(ClassLoader.getSystemClassLoader());
		this.classPath = classPath;
	}

	//1.重新findClass方法
	@Override
	protected Class<?> findClass(String name) throws ClassNotFoundException {
		byte[] b = this.loadData(name);
		return this.defineClass(name, b, 0, b.length);
	}

	//加載class文件中的內容
	private byte[] loadData(String name) {
		//.替換為//表示
		name = name.replaceAll(".", "//");
		try {
			FileInputStream is = new FileInputStream(new File(classPath + name + ".class"));
			ByteArrayOutputStream aos = new ByteArrayOutputStream();
			int b = 0;
			while((b = is.read())!=-1){
				aos.write(b);
			}
			is.close();
			aos.close();
			return aos.toByteArray();
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		return null;
	}
}




spring boot入門之——熱部署