当我 运行 一个 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/
背景:
我们有一个多模块项目,它由四个模块组成“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.ymlendpoints:
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/