spring boot打包成war包部署及修改默认配置文件的名称

原创
2017/04/24 15:21
阅读数 2.6K

最近因项目需要,要将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)

看来多读书,多看报是很有用的啊。。。。。

泪奔中。。。。。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
1 收藏
1
分享
返回顶部
顶部