Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring引导读取基于类路径arg的属性文件_Spring_Spring Boot - Fatal编程技术网

Spring引导读取基于类路径arg的属性文件

Spring引导读取基于类路径arg的属性文件,spring,spring-boot,Spring,Spring Boot,我已经创建了一个独立的boot.jar,我需要开始将它集成到更高的环境中。 每个环境都有一个属性文件,其中包含特定于数据库的连接信息。因为这不在我的启动jar中,所以我想以某种方式添加这个database.properties文件的路径,然后根据密钥读取条目。用于创建一个bean,如下所示: <bean id="propertyLoader" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigu

我已经创建了一个独立的boot.jar,我需要开始将它集成到更高的环境中。 每个环境都有一个属性文件,其中包含特定于数据库的连接信息。因为这不在我的启动jar中,所以我想以某种方式添加这个database.properties文件的路径,然后根据密钥读取条目。用于创建一个bean,如下所示:

<bean id="propertyLoader" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
        <value>classpath:application.properties</value>
</property>
正在更新我的application.Properties:

spring.datasource.username='jdbc.username'
spring.datasource.password='jdbc.password'

类似这样做,我可以参数化application.properties文件。

您已经告诉过您不能在jar中包含属性文件,但仍然有多个选项

1> 传递各个环境的属性文件

java -jar myproject.jar --spring.config.location=classpath:/database.properties 
2> 调用jar时传递属性

java -jar app.jar --spring.datasource.username="jdbc.username" --spring.datasource.password="jdbc.password"
`


我会选择选项1,因为在争论中传递凭证是不可取的。

您已经告诉过您不能在jar中包含属性文件,但仍然有多个选项

1> 传递各个环境的属性文件

java -jar myproject.jar --spring.config.location=classpath:/database.properties 
2> 调用jar时传递属性

java -jar app.jar --spring.datasource.username="jdbc.username" --spring.datasource.password="jdbc.password"
`


我会选择选项1,因为在争论中传递凭证是不可取的。

SpringBoot提供了配置文件,基本上允许您为每个环境拥有单独的application.properties文件

你可以有这样的东西:

public interface DataSourceConfig {}

@Component
@Profile("dev")
public DevDataSourceConfig implements DataSourceConfig{}

@Component
@Profile("prod")
public ProdDataSourceConfig implements DataSourceConfig{}
如果将spring概要文件
“dev”
设置为活动,则只有
DevDataSourceConfig
bean将被实例化,并且在spring
环境中
将从
application-dev.properties
文件中读取要注入的属性

类似地,当激活
“prod”
配置文件时,只有
ProdDataSourceConfig
将被实例化,属性将从
application-prod.properties
文件加载

这使您能够:

---
application-dev.properties
spring.datasource.username='jdbc.username'
spring.datasource.password='jdbc.password'
---
application-prod.properties
spring.datasource.username='PROD_jdbc.username'
spring.datasource.password='PROD_jdbc.password'
如果要从文件系统上的自定义位置加载配置,可以检查如何使用命令行参数()传递该位置

例如:

java -jar boot.jar --spring.config.location=classpath:/database.properties

SpringBoot提供了概要文件,基本上允许您为每个环境拥有单独的application.properties文件

你可以有这样的东西:

public interface DataSourceConfig {}

@Component
@Profile("dev")
public DevDataSourceConfig implements DataSourceConfig{}

@Component
@Profile("prod")
public ProdDataSourceConfig implements DataSourceConfig{}
如果将spring概要文件
“dev”
设置为活动,则只有
DevDataSourceConfig
bean将被实例化,并且在spring
环境中
将从
application-dev.properties
文件中读取要注入的属性

类似地,当激活
“prod”
配置文件时,只有
ProdDataSourceConfig
将被实例化,属性将从
application-prod.properties
文件加载

这使您能够:

---
application-dev.properties
spring.datasource.username='jdbc.username'
spring.datasource.password='jdbc.password'
---
application-prod.properties
spring.datasource.username='PROD_jdbc.username'
spring.datasource.password='PROD_jdbc.password'
如果要从文件系统上的自定义位置加载配置,可以检查如何使用命令行参数()传递该位置

例如:

java -jar boot.jar --spring.config.location=classpath:/database.properties