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