gpt4 book ai didi

java - 如何在java中从maven读取系统属性

转载 作者:行者123 更新时间:2023-11-30 06:12:29 26 4
gpt4 key购买 nike

我正在开发一个在 tomcat 服务器上运行的 Web 应用程序。我针对不同的环境有不同的属性文件,因此我想从 java 文件中的 pom 文件读取环境变量,并在运行命令 mvn clean install 时设置该环境属性。

这是我的 pom 文件:

<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>marketingcenter</groupId>
<artifactId>marketingcenter</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>

<dependencies>
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>jsr311-api</artifactId>
<version>1.1.1</version>
</dependency>

<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.8</version>
</dependency>

<!-- https://mvnrepository.com/artifact/log4j/log4j -->
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>


</dependencies>

<profiles>
<!-- The configuration of the development profile -->
<profile>
<id>dev</id>
<!-- The development profile is active by default -->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<environment.id>environment_dev</environment.id>
</properties>
</profile>
<!-- The configuration of the production profile -->
<profile>
<id>prod</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<environment.id>environment_prod</environment.id>
</properties>
</profile>
<!-- The configuration of the testing profile -->
<profile>
<id>qa</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<environment.id>environment_qa</environment.id>
</properties>
</profile>
<profile>
<id>reg</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<properties>
<environment.id>environment_reg</environment.id>
</properties>
</profile>
</profiles>
<build>
<sourceDirectory>src</sourceDirectory>
<resources>
<resource>
<directory>src</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<warSourceDirectory>WebContent</warSourceDirectory>
</configuration>
</plugin>
<!-- <plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
<executions>
<execution>
any phase before your app deploys
<phase>prepare-package</phase>
<goals>
<goal>set-system-properties</goal>
</goals>
<configuration>
<properties>
<property>
<name>environment</name>
<value>environment_dev</value>
</property>
</properties>
</configuration>
</execution>
</executions>
</plugin> -->


<!-- <plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.3.2</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>com.keurig.config.DBUtils</mainClass>
<arguments>
<argument>argument1</argument>
</arguments>
<systemProperties>
<systemProperty>
<key>environment</key>
<value>environment_dev</value>
</systemProperty>
</systemProperties>
</configuration>
</plugin>
-->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.21.0</version>
<configuration>
<systemPropertyVariables>
<environment>environment_dev</environment>
</systemPropertyVariables>
</configuration>
</plugin>

</plugins>
</pluginManagement>
</build>
</project>

我已经尝试了多种已注释的内容,但所有内容都给出了相同的问题空值。我正在通过 DBUtils 类中的代码读取环境属性-

public class DBUtils {
private static final Logger LOG=Logger.getLogger(DBUtils.class);

public static Connection getConnection() throws SQLException {
Connection connection = null;

String str =System.getProperty("environment");
System.out.println("deven"+str);


//static Properties _config = PropertyLoader.loadProperties(System.getProperty("environment"));
Properties prop = PropertyLoader.loadProperties(str);
String url = prop.getProperty("databaseUrl");
String driverName = prop.getProperty("databaseDriver");
}
}

但我每次都得到空值。这就是结果-

devennull
devennull
2018-04-20 12:52:22,424 [http-nio-8080-exec-8] ERROR
java.lang.IllegalArgumentException: null input: name
at com.app.data.PropertyLoader.loadProperties(PropertyLoader.java:51)
at com.app.data.PropertyLoader.loadProperties(PropertyLoader.java:128)
at com.app.data.DBUtils.getConnection(DBUtils.java:23)

最佳答案

最简单的方法 - 使用中间 app.properties 文件:例如:

1 - 带有 environment.server.name 变量的配置文件的 Maven 片段:

<profile>
<id>dev</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<environment.server.name>DEVELOPMENT</environment.server.name>
</properties>
</profile>

2 - 在 app.properties 文件中(如果不存在则创建。通常在 src/main/resources 中)我们使用简单的映射:

environment.server.name=${environment.server.name}

3 - 创建将处理应用程序属性的简单类:

public class AppProperties {
private static final String PROPERTIES_FILE_NAME = "app.properties";
public static final String SERVER_NAME;
static {
try {
final PropertiesConfiguration configuration = new
PropertiesConfiguration(PROPERTIES_FILE_NAME);
SERVER_NAME = configuration.getString("environment.server.name");
} catch (ConfigurationException e) {
throw new RuntimeException("Failed to load properties", e);
}
}
private AppProperties() {}
}

4 - 您现在可以在应用程序中使用属性文件:

String serverName = AppProperties.SERVER_NAME;

关于java - 如何在java中从maven读取系统属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49934111/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com