你好,我有一个maven spring Boot rest项目。我想添加dev和prod配置,但它不工作。
在/src/main/resources下,我创建了application.yaml、application-dev.yaml和application-prod.yaml
# application.yaml
spring:
profiles:
active: prod
字符串
# application-dev.yaml
server:
port: 8080
spring:
datasource:
url: jdbc:h2:mem:mydb
username: sa
password: password
driverClassName: org.h2.Driver
型
# application-prod.yaml
server:
port: 8099
spring:
datasource:
url: jdbc:postgresql://localhost:5432/WsDb
username: postgres
password: postgres
driverClassName: org.postgresql.Driver
型
在pom.xml中,我有以下内容:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencies>
...
</dependencies>
<build>
<resources>
<resource>
<directory>/src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>dev</id>
<properties>
<spring.profiles.active>dev</spring.profiles.active>
</properties>
<dependencies>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
</dependencies>
</profile>
<profile>
<id>prod</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<spring.profiles.active>prod</spring.profiles.active>
</properties>
<dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>${postgres.version}</version>
</dependency>
</dependencies>
</profile>
</profiles>
型
当我用命令mvn clean package spring-boot:run -Dspring.profiles.active = prod
在Intellij Idea中运行调试配置的应用程序时,它说:
测试阶段输出
The following 1 profile is active: "prod"
Bootstrapping Spring Data JPA repositories in DEFAULT mode.
Finished Spring Data repository scanning in 164 ms. Found 2 JPA repository interfaces.
Replacing 'dataSource' DataSource bean with embedded version
Starting embedded database: url='jdbc:h2:mem:4348112a-775e-4b78-a5b7-e5bcfdf21761
HHH000204: Processing PersistenceUnitInfo [name: default]
型
运行阶段输出
No active profile set, falling back to 1 default profile: "default"
Bootstrapping Spring Data JPA repositories in DEFAULT mode.
Finished Spring Data repository scanning in 116 ms. Found 2 JPA repository interfaces.
Tomcat initialized with port 8080 (http)
Starting service [Tomcat]
型
2条答案
按热度按时间4c8rllxm1#
**问题解决了!**下面是一个摘要。
有两个问题:
第一个问题是application.yml、application-dev.yml和application-prod.yml没有被复制到target中,因此没有效果。这是由于我添加了一个构建配置:
字符串
这导致maven无法找到资源文件,因此抛出一条Info消息:
INFO] skip non existing resourceDirectory C:\src\main\resources
为了解决这个问题,我不得不在路径后面加上
${project.basedir}
。型
在所有这些解决方案被证明是不需要的之后,请参阅@Easterwood的评论,删除/src/main/resources开头的第一个/解决了问题
型
在此更改之后,maven可以找到资源文件并打印
[INFO] Copying 3 resources from src\main\resources to target\classes
第二个问题是测试运行的配置文件是通过命令行设置的,参数为-Dspring.profiles.active=prod x1c 0d1x
当jar使用默认配置文件(通过
型
如果在application.yml或命令行中没有指定,则使用“default”配置文件。
为了解决这个问题,我不得不在调试配置中设置一个环境变量。
的
这和
的
更新20.12.2023
我将maven变量spring.profiles.active重命名为activeProfiles
型
以及相应的配置文件属性设置
型
现在要在调试配置中选择profile i use -P参数,
型
或
型
这将根据活动配置文件(dev或prod)设置maven变量activeProfiles的值,该值将在application.yml中被替换
型
另外,我不得不在pom.xml中添加h2数据库依赖项,因为spring Boot 抱怨在测试阶段没有找到驱动程序。
型
bf1o4zei2#
据我所知,命令行参数
-Dspring.profiles.active=prod
没有影响。spring-boot插件文档描述了如何激活配置文件。字符串
在你的项目中,
prod
配置文件被激活只是因为application.yaml
文件中的spring.profiles.active
属性。这把我引诱到了错误的渡船上。在spring文档中也有一个如何使用maven profile激活spring profile的示例。
型