我创建了一个独立的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文件。
答案 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'