我有application.yml
,application-dev.yml
和application-dev.yml
mvn spring-boot:run -Dspring.profiles.active=dev
它不起作用,我无法使用mvn spring-boot:run
选择开发配置文件。我该如何选择?java -jar XXX.jar --spring.profiles.active=dev
有效,我尝试-Dspring.profiles.active=dev
但它不起作用。在我的项目中,我使用java -jar XXX.jar
它运行,但如果我使用java -jar XXX.jar --spring.profiles.active=dev
选择开发配置文件,控制台打印这么多日志并警告我从未见过使用java -jar XXX.jar
,并告诉我APPLICATION FAILED TO START
答案 0 :(得分:37)
我不确定我是否完全理解这个问题,但我会尝试通过在Spring Boot中提供有关配置文件的一些详细信息来解答。
对于您的#1示例,根据文档,您可以使用-Drun.profiles
使用Spring Boot Maven插件选择配置文件。
修改:对于Spring Boot 2.0+ run
已重命名为spring-boot.run
mvn spring-boot:run -Drun.profiles=dev
http://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/run-profiles.html
在#2示例中,您将在jar名称后面定义活动配置文件。您需要在正在运行的jar的名称之前提供JVM参数。
java -jar -Dspring.profiles.active=dev XXX.jar
一般信息:
您提到您同时拥有application.yml
和application-dev.yml
。使用dev
配置文件运行实际上会加载两个配置文件。来自application-dev.yml
的值将覆盖application.yml
提供的相同值,但会加载yml
个文件中的值。
还有多种方法可以定义活动配置文件。
您可以像在运行jar时使用-Dspring.profiles.active
一样定义它们。您还可以使用SPRING_PROFILES_ACTIVE
环境变量或spring.profiles.active
系统属性设置配置文件。
答案 1 :(得分:7)
如果您使用的是Spring Boot Maven插件,请运行:
mvn spring-boot:run -Dspring-boot.run.profiles=foo,bar
(https://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/run-profiles.html)
答案 2 :(得分:4)
你不需要三个.yml文件。您可以拥有一个application.yml文件,并在每个配置文件节以3连字符分隔的相同内容中编写配置文件特定属性(---)
接下来,为了选择当前活动的配置文件,您也可以在application.yml文件中指定它,如下所示:
spring:
profiles:
active:
- local
但是,如果设置环境变量,则会覆盖此配置,例如: SPRING_PROFILES_ACTIVE = dev
以下是您要求的示例文件:
# include common properties for every profile in this section
server.port: 5000
spring:
profiles:
active:
- local
---
# profile specific properties
spring:
profiles: local
datasource:
url: jdbc:mysql://localhost:3306/
username: root
password: root
---
# profile specific properties
spring:
profiles: dev
datasource:
url: jdbc:mysql://<dev db url>
username: <username>
password: <password>
答案 3 :(得分:2)
如果您使用的是maven,请在pom.xml中定义如下所示的配置文件
<profiles>
<profile>
<id>local</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<jdbc.url>dbUrl</jdbc.url>
<jdbc.username>dbuser</jdbc.username>
<jdbc.password>dbPassword</jdbc.password>
<jdbc.driver>dbDriver</jdbc.driver>
</properties>
</profile>
<profile>
<id>dev</id>
<properties>
<jdbc.url>dbUrl</jdbc.url>
<jdbc.username>dbuser</jdbc.username>
<jdbc.password>dbPassword</jdbc.password>
<jdbc.driver>dbDriver</jdbc.driver>
</properties>
<dependencies>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
</dependencies>
</profile>
<profile>
<id>prod</id>
<properties>
<jdbc.url>dbUrl</jdbc.url>
<jdbc.username>dbuser</jdbc.username>
<jdbc.password>dbPassword</jdbc.password>
<jdbc.driver>dbDriver</jdbc.driver>
</properties>
</profile>
默认情况下,即,如果未选择任何配置文件,则将始终使用本地配置文件。
要在Spring Boot 2.x.x中选择特定的配置文件,请使用以下命令。
mvn spring-boot:run -Dspring-boot.run.profiles=dev
如果要使用特定配置文件的属性进行构建/编译,请使用以下命令。
mvn clean install -Pdev -DprofileIdEnabled=true
答案 4 :(得分:1)
如果您使用的是Maven,
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<profiles>
<profile>dev</profile>
</profiles>
</configuration>
</plugin>
</plugins>
</build>
将此开发人员设置为有效个人资料
./mvnw spring-boot:run
将dev作为活动配置文件。
答案 5 :(得分:1)
自Spring Boot v2 +起
我已经通过Spring Boot v2.3.5.RELEASE进行了验证
带有Spring Boot Maven插件
您可以像这样提供commandline argument:
#include <algorithm>
#include <cctype>
#include <fstream>
#include <iostream>
#include <iterator>
#include <string>
#include <vector>
struct Student {
std::string name, studentID;
int credits;
float gpa;
friend std::ostream &operator<<(std::ostream &, const Student &);
friend std::istream &operator>>(std::istream &, Student &);
};
std::ostream &operator<<(std::ostream &out, const Student &s) {
out << s.name << ' ' << s.studentID << ' ' << s.credits << ' ' << s.gpa
<< '\n';
return out;
}
std::istream &operator>>(std::istream &in, Student &s) {
s.name.clear();
std::string str;
while (in >> str && std::none_of(str.begin(), str.end(), ::isdigit))
s.name += str + ' ';
s.name.pop_back();
s.studentID = str;
in >> s.credits >> s.gpa;
return in;
}
int main() {
std::ifstream is("lab9input.dat");
std::vector<Student> v(std::istream_iterator<Student>(is), {});
auto max_gpa = std::max_element(v.begin(), v.end(), [](auto &a, auto &b) {
return b.gpa > a.gpa;
})->gpa;
std::cout << "The highest GPA student(s) is(are): \n";
for (auto &i : v) if (i.gpa == max_gpa) std::cout << i;
}
您可以像这样提供JVM argument:
mvn spring-boot:run -Dspring-boot.run.arguments="--spring.profiles.active=dev"
java -jar
mvn spring-boot:run -Dspring-boot.run.jvmArguments="-Dspring.profiles.active=dev"
(注意顺序)
或
java -Dspring.profiles.active=dev -jar app.jar
(音符顺序)
答案 6 :(得分:0)
您可以在一个 application.properties(yml)中指定属性,例如here。然后
mvn clean spring-boot:run -Dspring.profiles.active=dev
应正确运行。它对我有用
答案 7 :(得分:0)
@Profile批注允许您指示组件是 一个或多个指定配置文件符合条件时可以进行注册 活性。使用上面的示例,我们可以重写dataSource 配置如下:
@Configuration
@Profile("dev")
public class StandaloneDataConfig {
@Bean
public DataSource dataSource() {
return new EmbeddedDatabaseBuilder()
.setType(EmbeddedDatabaseType.HSQL)
.addScript("classpath:com/bank/config/sql/schema.sql")
.addScript("classpath:com/bank/config/sql/test-data.sql")
.build();
}
}
另外一个:
@Configuration
@Profile("production")
public class JndiDataConfig {
@Bean(destroyMethod="")
public DataSource dataSource() throws Exception {
Context ctx = new InitialContext();
return (DataSource) ctx.lookup("java:comp/env/jdbc/datasource");
}
}
答案 8 :(得分:0)
在资源目录中为您需要运行应用程序的每个环境(例如dev,qa,stg等)创建特定的.yml文件。 image of .yml files in resources directory
如果您在pom.xml文件中使用spring-boot-maven-plugin 2.0.5.RELEASE,则可以按如下所示将配置文件添加到依赖项标记中。 image of pom.xml spring-boot-maven-plugin (您可以使用多个配置文件标签配置多个配置文件)
然后,您可以使用以下命令来构建和运行项目。
1) mvn clean install
2) mvn spring-boot:run -Dspring-boot.run.default==qa
然后,您将看到在运行项目时将默认配置文件设置为qa。 displaying the default profile when running the application
答案 9 :(得分:0)
mvn spring-boot:run -Dspring-boot.run.profiles=foo,bar
**来源-** https://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/run-profiles.html
基本上,当项目中存在多个application- {environment} .properties时,这是必需的。默认情况下,如果您在命令行上传递了-Drun.profiles或在
中为activeByDefault true <profile>
<id>dev</id>
<properties>
<activatedProperties>dev</activatedProperties>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
没有像上面定义的那样,默认情况下它将选择application.properties,否则您需要通过附加-Drun.profiles = {dev / stage / prod}进行选择。
TL; DR
mvn spring-boot:run -Drun.profiles=dev
答案 10 :(得分:0)
使用Intellij,因为我不知道如何将键盘快捷键设置为mvn spring-boot:run -Dspring.profiles.active=dev
,所以我必须这样做:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<jvmArguments>
-Dspring.profiles.active=dev
</jvmArguments>
</configuration>
</plugin>
答案 11 :(得分:0)
在Intellij IDEA中使用“ -Dspring-boot.run.profiles = foo,local”。工作正常它设置了2个配置文件“ foo和local”。
已通过启动版本“ 2.3.2.RELEASE”和Intellij IDEA CE 2019.3。进行了验证。
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
答案 12 :(得分:0)
或者,可以通过添加以下行直接在application.properties文件中指定配置文件:
spring.profiles.active =产品
配置文件与Spring Boot属性文件结合使用。默认情况下,Spring Boot会解析一个名为application.properties的文件(位于src / main / resources目录中)以标识配置信息。
我们的第一个任务是在该文件中添加一个参数,该参数将告诉Spring使用与活动配置文件(即当前与该应用程序一起运行的配置文件)相对应的其他特定于环境的属性文件。我们可以通过将以下内容添加到application.properties文件中来做到这一点:
spring.profiles.active=@activatedProperties @
现在,我们需要创建两个新的特定于环境的属性文件(与现有application.properties文件位于同一路径),一个将由DEV概要文件使用,另一个将由PROD概要文件使用。这些文件需要命名为以下名称:
application-dev.properties
application-prod.properties
在每种情况下,我们都将prod指定为活动配置文件,这将导致出于配置目的选择application-prod.properties文件。