Docker部署Tomcat及War包,并引用外部application配置文件

Tomcat部署War包并引用本地application.properties或.yml

一、需求

当需要在多台服务器上部署同一个war包时,一般情况需要针对每一个服务器编写SpringBoot程序的application配置文件中的ip和端口等相关信息,然后再分别打包部署到对应服务器上的Tomcat中,比较麻烦。
所以,可以通过打包一次war包,放到所有服务器上,然后通过每个服务器上的外部application配置文件覆盖当前服务器上war包内的配置文件,来简化部署流程。
本文通过Docker以挂载的方式部署war包以及外部配置文件。

二、步骤

1、在程序中创建EnvironmentPostProcessor接口的实现类

properties类型
public class MyEnvironmentPostProcessor implements EnvironmentPostProcessor {
    @Override
    public void postProcessEnvironment(ConfigurableEnvironment configurableEnvironment,
                                       SpringApplication application) {
        // tomcat路径
        String property = System.getProperty("catalina.home");
        System.out.println("catalinahome:" + property);
        // path为配置文件在linux机器中的位置,flowable-default.properties换成自己的外部配置文件名
        String path = property + File.separator + "conf" + File.separator + "flowable-default.properties";
        File file = new File(path);
        System.out.println("Loading local settings from : " + path);
        if (file.exists()) {
            MutablePropertySources propertySources = configurableEnvironment.getPropertySources();
            Properties properties = loadProperties(file);
            System.out.println(properties.toString());
            propertySources.addFirst(new PropertiesPropertySource("Config", properties));
        }
    }

    private Properties loadProperties(File f) {
        FileSystemResource resource = new FileSystemResource(f);
        try {
            return PropertiesLoaderUtils.loadProperties(resource);
        } catch (IOException ex) {
            throw new IllegalStateException("Failed to load local settings from " + f.getAbsolutePath(), ex);
        }
    }
}
yml类型
public class MyEnvironmentPostProcessor implements EnvironmentPostProcessor {
    @Override
    public void postProcessEnvironment(ConfigurableEnvironment configurableEnvironment,
                                       SpringApplication application) {
        // tomcat路径
        String property = System.getProperty("catalina.home");
        // path为配置文件在linux机器中的位置,flowable-default.yml换成自己的外部配置文件名
        String path = property + File.separator + "conf" + File.separator + "flowable-default.yml";
        //Springboot读取yml配置
        YamlPropertiesFactoryBean yaml = new YamlPropertiesFactoryBean();
        yaml.setResources(new FileSystemResource(path));
        MutablePropertySources propertySources = environment.getPropertySources();
        propertySources.addFirst(new PropertiesPropertySource("Config", yaml.getObject()));
    }
}

2、创建spring.factories文件

在SpringBoot项目的resources目录下的META-INF目录下创建spring.factories文件,并添加一下内容:
“=”后面的内容就是步骤1实现类的全类名

org.springframework.boot.env.EnvironmentPostProcessor=org.flowable.ui.application.MyEnvironmentPostProcessor

3、将项目打成war包

将war包放到每个linux服务器的文件夹下,后续挂载到Tomcat容器的webapps目录下

4、为每台服务器准备一个外部application配置文件

可以直接将SpringBoot中的application配置文件复制出来,放到每个服务器的某个文件夹中
在这里插入图片描述
将application配置文件中有关服务器的信息进行响应的修改。(比如:当前flowable需要使用本机的mysql,就将mysql的ip、用户名、密码等修改为本机的mysql信息,其他的包括:redis、mongodb、kafka等等相关信息进行响应的修改即可。)
后续挂载到Tomcat容器的conf目录下(这里的conf是通过第一步代码中的path设置的,可根据需要修改)。

5、以挂载方式启动tomcat容器实例

docker run -d -p 7777:8080 
-v /usr/zsh/flowable/flowable-default.properties:/usr/local/tomcat/conf/flowable-default.properties 
-v /usr/zsh/flowable/flowable-ui.war:/usr/local/tomcat/webapps/flowable-ui.war 
--name flowable43 tomcat:8.5

6、结果

在这里插入图片描述

三、参考

1、SpringBoot- 技术专题 -war 包部署读取外部配置 Properties
2、将SpringBoot项目打包成war,并且Tomcat读取外置的文件
3、Springboot打war包部署读取外部配置.yml文件的方法

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值