当我 运行 一个 springboot 应用程序时,它总是从错误的路径加载属性

it always loads properties from a wrong path when I run a springboot application

背景:

我们有一个多模块项目,它由四个模块组成“assembly”,“configservice”,“adminservice[=31” =]”和“portal”。模块之间的依赖是这样的,"configservice"、"adminservice"和"portal"都是[=的依赖40=]."assembly"所做的只是判断运行是哪个应用程序("portal","adminservice"和"configservice")。

情况:

当我选择 运行 portal 时,它总是从配置服务加载 bootstrap.yml 而不是 portal.And 它还加载其他资源(比如 liquibase 的 属性) 来自配置服务的 class 路径,而不是来自门户的路径。
AssemblyApplication.java.assembly 的条目 class,也是唯一的 class "assembly" 有:
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class,
    HibernateJpaAutoConfiguration.class})
public class AssemblyApplication {

  private static final Logger logger = LoggerFactory.getLogger(AssemblyApplication.class);

  public static void main(String[] args) throws Exception {
    ConfigurableApplicationContext commonContext =
        new SpringApplicationBuilder(AssemblyApplication.class).web(false).run(args);
    commonContext.addApplicationListener(new ApplicationPidFileWriter());

    // Run configservice
    if (commonContext.getEnvironment().containsProperty("configservice")) {
      ConfigurableApplicationContext configContext =
          new SpringApplicationBuilder(ConfigServiceApplication.class).parent(commonContext)
              .sources(RefreshScope.class).run(args);
    }

    // Run adminservice
    if (commonContext.getEnvironment().containsProperty("adminservice")) {
      ConfigurableApplicationContext adminContext =
          new SpringApplicationBuilder(AdminServiceApplication.class).parent(commonContext)
              .sources(RefreshScope.class).run(args);
    }

    // Run portal
    if (commonContext.getEnvironment().containsProperty("portal")) {
      ConfigurableApplicationContext portalContext =
          new SpringApplicationBuilder(PortalApplication.class).parent(commonContext)
              .sources(RefreshScope.class).run(args);
    }
  }
}

文件结构:

configservice:
  -configservice
    -src
      -main
        -java
        -resources
          -liquibase
            -changelog.xml
        -application.yml
        -bootstrap.yml

adminservice:
  -adminservice
    -src
      -main
        -java
        -resources
          -application.yml
          -bootstrap.yml

portal:
  -portal
    -src
      -main
        -java
        -resources
          -liquibase
            -changelog.xml
        -application.yml

属性内容

配置服务的 bootstrap.yml
endpoints:
  health:
    sensitive: false

management:
  security:
    enabled: false
  health:
    status:
      order: DOWN, OUT_OF_SERVICE, UNKNOWN, UP

spring:
  datasource:
    continue-on-error: true
    platform: h2
  jpa:
    show-sql: true
    properties:
      hibernate:
        dialect: org.hibernate.dialect.H2Dialect
    hibernate:
      ddl-auto: none


liquibase:
  change-log: classpath:liquibase/changelog.xml
  user:
  password:
  url: 
${spring_datasource_url:jdbc:h2:~/.h2/default/configdb;AUTO_SERVER=TRUE}
  enabled: true
  drop-first: false
配置服务的 application.yml
spring:
  application:
    name: configservice
  profiles:
    active: ${active_profile}

server:
  port: ${config_port:8330}

logging:
  file: /opt/logs/configservice.log
门户的 application.yml
spring:
  application:
    name: portal
  profiles:
    active: ${active_profile}
  datasource:
    continue-on-error: true
    platform: h2
  jpa:
    show-sql: true
    properties:
      hibernate:
        dialect: org.hibernate.dialect.H2Dialect
    hibernate:
      ddl-auto: none

server:
  port: 9080

logging:
  file: /opt/logs/100003173/portal.log

endpoints:
  health:
    sensitive: false
management:
  security:
    enabled: false
  health:
    status:
      order: DOWN, OUT_OF_SERVICE, UNKNOWN, UP

liquibase:
  change-log: classpath:liquibase/changelog.xml
  user:
  password:
  url: ${spring_datasource_url}
  enabled: true
  drop-first: false

configservice.jar(或您构建的工件的任何名称)是类路径中的第一个并获胜。

您应该外部化您的配置或在每个模块中以不同的方式命名您的 属性 文件。

如何使用不同的名称,您可以在此处找到:

http://roufid.com/rename-spring-boot-application-properties/