最近因项目需要,要将Spring boot的项目打成war包进行部署。然后呢默认的配置文件不适用resources下的application.properites。而是要从外部进行加载。就此进行了一些资料的查找与探索,在此将整个结果进行一个记录。
1.将spring boot打成war包。对于这个,网上应该能够度娘出一大包的方式,在此我搜集了两种方式,分别是:
方法一:对于支持serverlet3.0以上的容器。
直接使用以下方式:
step1.修改pom文件对tomcat的依赖, 具体做法如下,
pom.xml依赖配置:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
step2.修改spring boot启动类
public class SpringBootSampleApplication extends SpringBootServletInitializer{
private static final Logger logger = LoggerFactory.getLogger(SpringBootSampleApplication.class);
public static void main(String[] args) throws Exception {
SpringApplication.run(SpringBootSampleApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(this.getClass());
}
}
step3.修改pom.xml的build部分
<!-- maven打包的时候告诉maven不需要web.xml,否刚会报找不到web.xml错误 --> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.4</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build>
now,打成war包部署吧!
方法二:针对serverlet3.0以下的容器的。
《资源找寻中。。。请稍等》
以上已经能够将spring boot打包成war包启动了,下面就是制定启动文件了。
这个,指定spring boot的启动文件,网上也有很多种方法,比如说什么多spring boot配置多环境启动文件。具体链接如下:
http://412887952-qq-com.iteye.com/blog/2307104 《PS:强烈推荐此人博客学习spring boot》
但是我要做的是从系统路径里面加载配置文件,而不是从项目路径加载配置文件。对于普通的spring boot启动。
这种方式呢,稍加修改,将InputStream修改下,改成FiInputStream,就能从指定路径读取配置文件进行启动了。终于成功了,是的终于成功了,如果以普通的spring boot方式启动的话。通过war包启动,会发现使用的是系统下默认的配置,而不是指定配置。
这就需要说下了,普通方式,或者说以jar包方式启动的话,项目入口是 启动类里面的main方法。而如果以war包启动的话,项目入口变成了 启动类中的 configure 方法。所以以上修改应该在configure方法里面进行。
修改后最终启动方法为
@SpringBootApplication()
public class Application extends SpringBootServletInitializer {
private final static String proPath = "/ww/config/test/application1.properties"; // linux配置文件路径
private final static String winProPath = "F:\\ww\\config\\application1.properties";
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
if (OS.isLinux) {
// 如果是linux系统
// 读取系统路径的配置文件
Properties properties = new Properties();
InputStream inputStream = null;
try {
inputStream = new FileInputStream(new File(proPath));
properties.load(inputStream);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
builder.addCommandLineProperties(false);
builder.application().setAddCommandLineProperties(false);
builder.application().setDefaultProperties(properties);
}
return builder.sources(Application.class);
}
}
OK,现在终于打包目的了,springboot项目,使用war包启动,并且将项目的配置文件可以放到统一路径进行管理。
参考文献:
http://blog.csdn.net/u010317202/article/details/50379057
http://www.w2bc.com/article/225689
以下内容为后续更新内容:
怪我太傻,太天真。绕了这么大的一圈。走了这么多冤枉路:
对于以上的问题,其实用一个注解就搞定了。那就是Spirng的 @PropertieSource
具体使用方法如下
@PropertySource(value = {
"classpath:config.properties",
"file:/xx/config/service-proxy/config.properties"
}, ignoreResourceNotFound = true)
看来多读书,多看报是很有用的啊。。。。。
泪奔中。。。。。