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

时间:2018-02-09 21:07:07

标签: spring spring-boot

我创建了一个独立的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>

但是有了启动,我不知道如何做到这一点:但是我想指出下面的属性示例并提取我的值,并以某种方式填充我在dev中硬编码的application.properties值。

server:/config/database.properties
jdbc.username=TEST
jdbc.password=CHANGEME

更新我的application.properites:

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

我可以参数化我的application.properties文件。

2 个答案:

答案 0 :(得分:1)

你已经告诉过你的jar里面没有属性文件,还有多种选择。

1&GT;传递相应环境的属性文件。

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"

Read a lot of other options here `

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

答案 1 :(得分:1)

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

你可以这样:

public interface DataSourceConfig {}

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

@Component
@Profile("prod")
public ProdDataSourceConfig implements DataSourceConfig{}

如果将弹出配置文件"dev"设置为活动状态,则只会实例化DevDataSourceConfig bean,并且在Spring Environment中将读取将要注入的属性{ {1}}档案。

同样,当您激活application-dev.properties个人资料时,只会"prod"实例化,并且会从ProdDataSourceConfig个文件中加载属性。

这允许您拥有:

application-prod.properties

如果要从文件系统上的自定义位置加载配置,可以使用命令行参数(docs)检查如何传递位置

示例:

---
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'