NutzBoot读取外部资源文件功能的诞生


声明:本文转载自https://my.oschina.net/u/3768506/blog/1607230,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

前因

Nutz接触时间了,最近使用NutzBoot开发了个微服务,在准备部署的时候遇上一个问题,NutzBoot在发布时,会将配置文件、模板文件都打包进jar包,那么在后期做细微调整时将涉及到重新发包,本人强伯症,受不了这个,如果项目只是需要对配置做些修改,或者模板做些修改,完全没必要重新打包发布,故而发生了之后的事情 - 改造

过程

怎样把配置文件打包到jar包外面?

修改 pom.xml <build>...</build>标签内加入配置,过滤resources目录

<resources> 	<resource> 		<directory>src/main/resources</directory> 		<excludes> 			<exclude>**/*</exclude> 		</excludes> 		<filtering>true</filtering> 	</resource> </resources> 

<build><plugins>...</plugins></build>标签内加入配置,将配置资源目录编译到jar包外

<plugin> 	<groupId>org.apache.maven.plugins</groupId> 	<artifactId>maven-resources-plugin</artifactId> 	<executions> 		<execution> 			<id>copy-resources</id> 			<phase>package</phase> 			<goals> 				<goal>copy-resources</goal> 			</goals> 			<configuration> 				<encoding>UTF-8</encoding> 				<outputDirectory> 					${project.build.directory} 				</outputDirectory>   <!-- 表示把配置文件拷到和jar包同一个路径下 --> 				<resources> 					<resource> 						<directory>src/main/resources/</directory> 					</resource> 				</resources> 			</configuration> 		</execution> 	</executions> </plugin> 

此时执行mvn clean;mvn compile;mvn package;已经可以将资源文件打包到jar包外部了。


那么问题来了,项目如何读取外部资源

首先我是想办法解决beetl模板文件的读取,因为NutzBoot项目没有考虑过外部读取的情况,所以必须经过改造,与@wendal进行讨论后,采取从Setup的init方法着手,手动指定模板读取路径,实现如下:

public class MainSetup implements Setup {     @Override     public void init(NutConfig nc) {         for(ViewMaker maker: nc.getViewMakers()) {             if(maker.getClass() == BeetlViewMakerStarter.class) {                 // 获取BeetlViewMaker对象                 BeetlViewMaker beetlViewMaker = (BeetlViewMaker)maker;                 // 生成FileResourceLoader 从文件系统取资源                 FileResourceLoader fileResourceLoader = new FileResourceLoader();                 fileResourceLoader.setCharset("UTF-8");                 // 设置jar包外部模板目录                 fileResourceLoader.setRoot(getBasePath() + File.separator + "template");                 // 配置beetlViewMaker使用外部目录读取模板                 beetlViewMaker.groupTemplate.setResourceLoader(fileResourceLoader);             }         }     }      @Override     public void destroy(NutConfig nc) {      }          // 获取jar包当前目录     static String getBasePath() {         String basePath = MainLauncher.class.getProtectionDomain().getCodeSource().getLocation().getPath();         int lastIndex = basePath.lastIndexOf(File.separator);         basePath = basePath.substring(0, lastIndex);         try {             basePath = java.net.URLDecoder.decode(basePath, "UTF-8");         } catch (UnsupportedEncodingException e) {             e.printStackTrace();         }         return basePath;     } } 

外部模板读取问题解决,就剩下读取外部配置文件,于是跟@wendal 又进行各种沟通,最后决定修改源码让NutzBoot支持读取外部配置文件,顺便实现了指定配置文件目录自动扫描,详细步骤就不写了,如有兴趣可关注 论坛讨论贴 NutzBoot 如何打包发布

经过修改后,现在NutzBoot支持外部配置方式,比如将application.properties放在jar包同级目录。 另外application.properties新增支持配置读取其他配置文件, 如:

nutz.boot.configure.properties.dir=config // 系统将自动扫描jar包同级config目录下所有properties文件进行参数读取 

结束语

到此我外部读取参数和模板的需求算是圆满解决,也特别感谢@wendal给予的支持,特此记录

本文发表于2018年01月15日 16:35
(c)注:本文转载自https://my.oschina.net/u/3768506/blog/1607230,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 2597 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1