我的開源小項目 - Linux Spring Boot Startup Generator

爲什麼開發這個小項目

1.之前寫了篇博客:Spring Boot Linux 部署腳本,
2.但是在實際開發中,需要手動修改其中的配置,有三處需要修改。
3.需要用chmod +x 賦予可執行權限
4.需要建立相關目錄結構

綜上所述,主要研究了 java打包tar,java賦予文件可執行權限相關內容
開發出了Linux Spring Boot Startup Generator from Github

在線使用方式 http://www.boommanpro.cn:8088/downloadTarGz?projectName=xxx

將後綴projectName參數值修改爲你自己想要的即可

Release版本

Release頁面下載 以 jar 結尾的文件

本地部署: java -jar linux-spring-boot-startup-generator.jar 運行即可

部署完成後–>點擊本地測試地址即可下載

linux部署

Release頁面下載 以 tar.gz結尾的文件

tar -zvxf linux-spring-boot-startup-generator.tar.gz

在目錄中運行./startup即可

項目核心源碼分析

1.模板框架採用Thymeleaf

/**
 * @author <a href="mailto:[email protected]">BoomManPro</a>
 * @date 2019/6/5 16:21
 * @created by BoomManPro
 */
public enum ThymeLeafConfig {
    /**
     * Thymeleaf默認配置
     */
    INSTANCE;
    private TemplateEngine templateEngine;

    private static final String DEFAULT_PREFIX = "/templates/";

    ThymeLeafConfig() {
        //因讀取的是Resource的文件 需要是ClassLoaderTemplateResolver
        ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
        templateResolver.setPrefix(DEFAULT_PREFIX);
        templateResolver.setTemplateMode(TemplateMode.TEXT);
        templateEngine = new TemplateEngine();
        templateEngine.setTemplateResolver(templateResolver);
    }

    public static TemplateEngine getTemplateEngine() {
        return INSTANCE.templateEngine;
    }
}

2.tar壓縮後的文件解壓具有可執行權限

/**
 * @author <a href="mailto:[email protected]">BoomManPro</a>
 * @date 2019/6/5 16:21
 * @created by BoomManPro
 */
@Slf4j
public class GzipUtil {
    public static InputStream pack(GeneratorFile[] generatorFiles) {

        ByteArrayOutputStream out = new ByteArrayOutputStream();
        TarArchiveOutputStream os = new TarArchiveOutputStream(out);
        try {
            for (GeneratorFile generatorFile : generatorFiles) {

                TarArchiveEntry tarArchiveEntry = new TarArchiveEntry(generatorFile.getFileName());
                if (generatorFile.isExecutable()) {
                    // = (octal) 0100755
                    tarArchiveEntry.setMode(33261);
                }
                byte[] bytes = new byte[]{};
                if (StringUtils.notBlank(generatorFile.getContent())) {
                    bytes = generatorFile.getContent().getBytes();
                    tarArchiveEntry.setSize(bytes.length);

                }
                os.putArchiveEntry(tarArchiveEntry);
                IOUtils.copy(new ByteArrayInputStream(bytes), os);
                os.closeArchiveEntry();

            }
        } catch (IOException e) {
            log.error("Exception:", e);
        } finally {
            try {
                os.flush();
                os.close();
            } catch (IOException e) {
                log.error("os Exception:", e);
            }
        }
        return IoConvertUtil.parse(out);
    }

}

可執行: // = (octal) 0100755 tarArchiveEntry.setMode(33261); 涉及到進制轉換

寫在最後

如果當前項目幫助到了你,希望能夠給個start哈,感激!!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章