使用IDEA开发SpringBoot实现多Module共用配置文件

       一般来说,开发一个项目会实现很多个服务接口,以前的做法是可以将全部接口糅合一起对外提供服务,但在现在,越来越提倡微服务理念,这种做法明显与微服务的理念背道而驰。更合理的做法,就是对项目进行服务拆分,使项目被拆分成多个小的服务,而服务采用面向接口的编程,这将极大的有利于项目的扩展和团队分工。

       使用IDEA,开发SpringBoot时,可以在一个项目下创建多个Module来进行服务拆分。每个Module可以有自己的配置,但难免会有一些配置是相同,比如数据库的配置,每个module都配置的话很麻烦而且不易于修改。所以,这篇文章里,我们要实现两个目标:

       (1)多个Module共用一套配置文件;

       (2)配置文件可以灵活切换环境,比如测试环境/开发环境,只需在共用的配置文件中切换指定的环境,就能实现多个module同时切换到指定的环境。

       新建一个springboot的demo工程,在该工程下分别创建三个moodue: config、module_a,module_b,其中,config是共用的模块,我们把共用的配置文件部署到config中,其他模块通过依赖config来使用共用的配置。

       一、共用模块的配置

       首先,config模块下的启动类、测试类都删掉,配置文件一定要以application-XX的形式命名,不然其他模块无法识别。

       config模块的结构如下:

其中,application-dev.properties表示开发环境下的配置:

spring.datasource.url=url_dev
spring.datasource.name=name_dev

application-test.properties表示测试环境下的配置:

spring.datasource.url=url_test
spring.datasource.name=name_test

application-prod.properties表示正式环境下的配置:

spring.datasource.url=url_prod
spring.datasource.name=name_prod

application-config.properties是config模块的配置:

#激活测试环境配置
spring.profiles.active=test

这里激活的是测试环境的配置。

       由于config模块已删除启动类及其测试类,因此需改动默认的pom文件配置:

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

上面这段配置需删除掉,或者注释掉,否则打包时会报错。

        然后右键pom文件,选择install,打包以备其他模块引用。

 

       二、其他模块引用共用模块的配置文件

       以模块A为例,要想引用config的配置

       1、必须在pom中添加config的依赖:

        <dependency>
            <groupId>org.stone.example</groupId>
            <artifactId>config</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>

        2、在application.properties配置文件中包含config:

spring.profiles.include=config

强调一下,必须是spring.profiles.include!这样就可以使用config模块的公共配置了。我们来试验一下,写一个控制器:

package org.stone.example.module_a;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * Title: ModuleAController$
 * Description: TODO
 *
 * @version V1.0
 * @author: yetong
 * @since: 2019/11/24$ 14:44$
 */
@RequestMapping("moduleA")
@RestController
public class ModuleAController {

    @Value("${spring.datasource.url}")
    private String url;

    @Value("${spring.datasource.name}")
    private String name;

    @RequestMapping("hello")
    public String helloModuleA() {
        System.out.println("url: " + url);
        System.out.println("name: " + name);
        return "Hello moduleA! url=" + url + ", name=" + name;
    }
}

这里采用@Value注解的方式引用配置,运行模块A的启动类ModuleAApplication,在地址栏中输入:http://127.0.0.1:8080/moduleA/hello

结果如下:

引用成功!其他模块要使用config的公共配置也遵循以上步骤即可。

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值